您的位置:首页 > 理论基础 > 计算机网络

http://acm.hdu.edu.cn/showproblem.php?pid=4337&&dfs

2012-08-03 14:37 260 查看
一道深搜题,给你一些朋友的关系,让你找到这样的一个排列,相邻的人是朋友,,

AC代码:

#include<cstdio>
#include<string.h>
#include<string>
#define N 180
using namespace std;
bool map

,vis
;
int path
;
bool flag;
int n,m,res;
void dfs(int x)
{
if(flag) return;
if(res==n)
{
printf("1");
for(int i=1;i<n;++i)
printf(" %d",path[i]);
printf("\n");
flag=true;
return;
}
for(int i=2;i<=n;++i)
if(!vis[i]&&map[x][i])
{
if(res==n-1&&!map[i][1]) continue;
path[res]=i;
vis[i]=true;
++res;
dfs(i);
vis[i]=false;
--res;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(map,false,sizeof(map));
memset(vis,false,sizeof(vis));
for(int i=0;i!=m;++i)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=map[b][a]=1;
}
res=1,flag=false;
vis[1]=true;
dfs(1);
if(!flag) printf("no solution\n");
}return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  path