现在的位置: 首页 > 综合 > 正文

HDU 4337 King Arthur's Knights(…

2018年03月17日 ⁄ 综合 ⁄ 共 927字 ⁄ 字号 评论关闭
题意:大概是说有N个人 每个人都跟其余的一些人有亲密关系 (每个人至少与一半人以上有PS:我不知道这个重条件有什么用)
它们坐在一环形桌 不亲密的人不能坐一起 问是否能围成一个环。

思路:直接DFS 搜索 遍历每个人,看是否形成一个环。

下面代码是我队友guanyunzhe写的

//46MS   
576K
#include <stdio.h>
#include <string.h>

const int N = 155;
int g[N][N], n;
bool vis[N];
int out[N];

bool dfs(int u, int dep)
{
    int i;
    vis[u] =
true;
    out[dep] =
u;
    if (dep ==
n)
    {
   
    vis[u] =
false;
   
    if (g[1][u]
== 1)
   
   
    return
true;
   
    else
   
   
    return
false;
    }
    for (i=1;
i<=n; ++i)
   
    if (g[u][i]
== 1 && !vis[i])
   
   
    if (dfs(i,
dep + 1))
   
   
   
    return
true;
    vis[u] =
false;
    return
false;
}

int main()
{
    int x, y,
m;
    while
(~scanf("%d", &n))
    {
   
    memset(g, 0,
sizeof(g));
   
    memset(vis,
false, sizeof(vis));
   
    scanf("%d",
&m);
   
    while
(m--)
   
    {
   
   
   
scanf("%d%d", &x, &y);
   
   
    g[x][y] =
g[y][x] = 1;
   
    }
   
    if (!dfs(1,
1))
   
    {
   
   
    printf("no
solution\n");
   
   
   
continue;
   
    }
   
    for (int
i=1; i<n; ++i)
   
   
    printf("%d
", out[i]);
   
   
printf("%d\n", out[n]);
    }
    return
0;
}

抱歉!评论已关闭.