雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

记录路径的搜索——zoj3332

Posted on 2011-03-30 16:23  huhuuu  阅读(215)  评论(0编辑  收藏  举报
每搜到结果就随时在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;
}