hdu2181哈密顿回路(简单dfs)

单纯的dfs输出路径,主要是需要注意一下vis标记在dfs退栈的时候要取消。

#include
#include
#include
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;
}

你可能感兴趣的:(题解)