哈密顿路径就是从1走到n每个节点只走一次,并且每个节点都要走。
dfs搜索+回溯即可解决问题。
先存i到其他地方,book标记是否走过,dis存第step步到达的地方,即可,
最后判断走的步数,与最后的位置即可。
#include<bits/stdc++.h>
using namespace std;
int a[50][10];
int ans;
int book[50];
int dis[50];
int n;
void dfs(int x,int step) {
for(int i=1; i<=3; i++) {
// cout<<"sdryes";
if(step==19&&a[x][i]==n) {
cout<<ans<<": ";
ans++;
dis[20]=n;
cout<<" "<<n;
for(int j=1; j<=20; j++)cout<<" "<<dis[j];
puts("");
return ;
}
if(book[a[x][i]]==1)continue;
book[a[x][i]]=1;
dis[step+1]=a[x][i];
dfs(a[x][i],step+1);
book[a[x][i]]=0;
}
}
int main() {
for(int i=1; i<=20; i++)
cin>>a[i][1]>>a[i][2]>>a[i][3];
while(cin>>n) {
if(!n)break;
memset(book,0,sizeof book);
dis[1]=n;
book[n]=1;
ans=1;
dfs(n,0);
}
return 0;
}