您的位置:首页 > 其它

hdu 2181 哈密顿绕行世界问题 - 搜索

2013-11-15 10:18 495 查看
我是我写的第一题递归,这题用深搜就可以了。注意输出的空格数。#include <iostream>
#include<cstring>
#include<stdio.h>
#include<algorithm>
using namespace std;
int visit[25];
int start;
int way;
int route[25];
int a[25][3];
int n;
void dfs(int ci,int step)
{
route[step]=ci;
if(step==19&&(a[ci][0]==start||a[ci][1]==start||a[ci][2]==start))
{
printf("%d: ",++way);
for(int j=0; j<20; j++)
printf("%d ",route[j]);
printf("%d\n",start);
return;
}
for(int k=0; k<3; k++)
{
if(visit[a[ci][k]]==0)
{
visit[a[ci][k]]=1;
dfs(a[ci][k],step+1);
visit[a[ci][k]]=0;
}
}
}
int main()
{
way=0;
for(int i=1; i<=20; i++)
{
scanf("%d %d %d",&a[i][0],&a[i][1],&a[i][2]);
sort(a[i],a[i]+3);
}
while(scanf("%d",&start))
{
if(start==0)break;
memset(visit,0,sizeof(visit));
route[0]=start;
visit[start]=1;
for(int i=0; i<3; i++)
{
n=1;
if(visit[a[start][i]]==0)
{
int step=1;
visit[a[start][i]]=1;
dfs(a[start][i],step);
visit[a[start][i]]=0;
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: