您的位置:首页 > 其它

【DFS】hdu 2181 哈密顿绕行世界问题

2013-08-14 21:40 429 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2181

分析:没啥说的,直接暴搜

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int NM=25;
int a[NM][NM],save[NM],ans;
bool vis[NM];

void DFS(int x,int n,int cc)
{
int i;
if(cc==21 && x==n){
printf("%d: ",ans++);
for(i=0;i<=20;i++)
printf(" %d",save[i]);
printf("\n");
}
for(i=1;i<=20;i++){
if(!vis[i] && a[x][i]){
save[cc]=i;
vis[i]=1;
DFS(i,n,cc+1);
vis[i]=0;
}
}
}

int main()
{
int i,n,x,y,z;
for(i=1;i<=20;i++){
scanf("%d%d%d",&x,&y,&z);
a[i][x]=a[i][y]=a[i][z]=1;
}
ans=1;
while(scanf("%d",&n)&&n){
save[0]=n;
memset(vis,0,sizeof(vis));
DFS(n,n,1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: