您的位置:首页 > 其它

记录路径的搜索——zoj3332

2011-03-30 16:23 232 查看
每搜到结果就随时在ji[]记录
num是搜到的步数
View Code

#include<stdio.h>

bool map[109][109];
int ji[109],n,num;
bool v[109];
bool ok;

void dfs(int s)
{
int ts,i;

if(ok==1)
return ;
if(num==n)
{
ok=1;
return ;
}
for(i=1;i<=n;i++)
{
if(map[s][i]==1&&v[i]==0)
{
num++;
ji[num]=i;
v[i]=1;
dfs(i);
if(ok==1)
return ;
v[i]=0;
num--;
}
}
}

int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n==1)
{
printf("1\n");
continue;
}

int i,j,tn;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
map[i][j]=0;
}
tn=n*(n-1)/2;
int a,b;
for(i=1;i<=tn;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
}

ok=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
v[j]=0;

v[i]=1;
ji[1]=i;
num=1;
dfs(i);
if(ok==1)
{
printf("%d",ji[1]);
for(j=2;j<=n;j++)
{
printf(" %d",ji[j]);
}
printf("\n");
break;
}
}
if(ok==0)
{
printf("Impossible\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: