dfs:哈密頓繞行世界問題(HDU-2181)
阿新 • • 發佈:2020-08-08
題解:一個規則的實心十二面體,它的 20個頂點標出世界著名的20個城市,你從一個城市出發經過每個城市剛好一次後回到出發的城市。
裸DFS;
#include<bits/stdc++.h> using namespace std; const int maxn=30; const int mod=142857; const int inf=0x3f3f3f3f; typedef long long ll; typedef pair<int,int> pii; const int N=5e5+10; int a[maxn][maxn];int ans[maxn]; int vis[maxn]; int m,cnt; void dfs(int city,int step) { if(city==m&&step==20) { cout<<++cnt<<": "; for(int i=0; i<20; i++) cout<<ans[i]<<" "; cout<<m<<endl; return ; } ans[step]=city;for(int i=1; i<=3; i++) { if(!vis[a[city][i]]) { vis[a[city][i]]=1; dfs(a[city][i],step+1); vis[a[city][i]]=0; } } } int main() { int x,y,z; for(int i=1; i<=20; i++) { cin>>x>>y>>z; a[i][1]=x; a[i][2]=y; a[i][3]=z; sort(a[i],a[i]+3); } while(cin>>m&&m) { memset(vis,0,sizeof(vis)); memset(ans,0,sizeof(ans)); dfs(m,0); } system("pause"); return 0; }