单纯的dfs输出路径,主要是需要注意一下vis标记在dfs退栈的时候要取消。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=25;
int gra[maxn][3];
bool vis[maxn];
int ans[maxn];
int cas;
void dfs(int u,int len,int st)
{
vis[u]=1;
int v;
ans[len]=u;
if(len==20&&(gra[u][0]==st||gra[u][1]==st||gra[u][2]==st))
{
printf("%d: ",cas++);
for(int i=1;i<=len;i++) printf("%d ",ans[i]);
printf("%d\n",st);
}
for(int i=0;i<=2;i++)
{
v=gra[u][i];
if(!vis[v])
{
dfs(v,len+1,st);
}
}
vis[u]=0;
}
int main()
{
//freopen("in.txt","r",stdin);
int q;
for(int i=1;i<=20;i++)
scanf("%d%d%d",&gra[i][0],&gra[i][1],&gra[i][2]);
while(~scanf("%d",&q)&&q)
{
cas=1;
memset(vis,0,sizeof(vis));
dfs(q,1,q);
}
return 0;
}