链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2181
题解:
用一个二维数组 way[i][3] 保存i点能到达所有 地方,然后在DFS的扩展地方就去遍历 后面那个3就好了
代码:
#include<iostream>
using namespace std;
int way[22][5];//保存路径
int vis[22];//标记数组
int path[100];//记录路径
int m,k;
void DFS(int now_city,int cnt)
{//now_city为当前的城市,cnt为第几步到达
path[cnt]=now_city;//记录路径
if(cnt==21&&now_city == m)
{//结束条件
cout<<k++<<": ";
for(int i=1;i<21;i++)
{
cout<<path[i]<<" ";
}
cout<<path[21]<<endl;
return ;
}
for(int i=0;i<3;i++)
{//遍历所有可能
int next_city = way[now_city][i];//寻找下一个顶点
if(cnt == 20 && next_city == m)
{//特判第21个点是否是m
DFS(m,21);
}
if(!vis[next_city])
{//如果下一个城市没被访问过
vis[next_city] = 1;
DFS(next_city,cnt+1);
vis[next_city] = 0;
}
}
}
int main()
{
for(int i=1;i<=20;i++)
{
cin>>way[i][0]>>way[i][1]>>way[i][2];
}
while(cin>>m)
{
if(m==0)
break;
k=1;
vis[m] = 1;
DFS(m,1);
}
return 0;
}