题目大意:
一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。输出路径。
解题思路:
直接从起点开始dfs即可。
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stdio.h>
using namespace std;
int path[25][3];
int f[25];
int ans[25],num,m;
void dfs(int now,int length){
f[now] = false;
ans[length] = now;
if(length == 20 && (m == path[now][0] || m == path[now][1] || m == path[now][2])){
num ++;
printf("%d: ",num);
for(int i = 1; i <= 20; i ++){
printf(" %d",ans[i]);
}
printf(" %d\n",m);
f[now] = true;
return;
}
for(int i = 0; i < 3; i ++){
if(f[path[now][i]]) dfs(path[now][i],length+1);
}
f[now] = true;
return;
}
int main()
{
for(int i = 1; i <= 20; i ++){
cin >> path[i][0] >> path[i][1] >> path[i][2];
sort(path[i],path[i]+3);
}
while(true){
cin >> m;
if(m == 0) break;
memset(f,true,sizeof(f));
num = 0;
dfs(m,1);
}
return 0;
}