从一个点出发回到一个点,经过图中每个点的回路,按照字典序输出所有解
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <vector> using namespace std; int edge[21][3]; bool vis[21]; int cnt; vector<int> path; //用来存储游走的路径 void dfs(int cur,int step,int target){ if(step==20 && cur==target){ printf("%d: %d ",cnt++,target); for(int i=0;i<path.size()-1;i++) printf("%d ",path[i]); printf("%d\n",target); return ; } for(int i=0;i<3;i++){ int t = edge[cur][i]; if(!vis[t]){ vis[t] = true; path.push_back(t); dfs(t,step+1,target); path.pop_back(); vis[t] = false; } } } int main(){ for(int i=1;i<=20;i++){ scanf("%d%d%d",&edge[i][0],&edge[i][1],&edge[i][2]); } int m; while(scanf("%d",&m) && m){ memset(vis,false,sizeof(vis)); memset(vis,0,sizeof(vis)); cnt = 1; dfs(m,0,m); } return 0; }