简单题,注意输出时候起始位置都有 m/*********************************************** * Author: fisty * Created Time: 2015/2/9 18:16:48 * File Name : three.cpp *********************************************** */ #include <iostream> #include <cstring> #include <deque> #include <cmath> #include <queue> #include <stack> #include <list> #include <map> #include <set> #include <string> #include <vector> #include <cstdio> #include <bitset> #include <algorithm> using namespace std; #define Debug(x) cout << #x << " " << x <<endl #define Memset(x, a) memset(x, a, sizeof(x)) const int INF = 0x3f3f3f3f; typedef long long LL; typedef pair<int, int> P; #define FOR(i, a, b) for(int i = a;i < b; i++) #define MAX_N 30 int G[MAX_N][MAX_N]; int m; int vis[MAX_N]; int root[MAX_N]; int cnt; void dfs(int v,int count){ root[count] = v; if(count == 20 && v == m){ cout << cnt++ << ": "; cout << " " << m; for(int i = 1;i <= 20; i++){ cout <<" "<< root[i]; } cout << endl; return ; }else{ for(int i = 1;i <= 20; i++){ if(G[v][i] && !vis[i]){ vis[i] = 1; dfs(i, count+1); vis[i] = 0; } } } } int main(){ //freopen("in.cpp", "r", stdin); cin.tie(0); ios::sync_with_stdio(false); Memset(G, 0); for(int i = 1;i <= 20; i++){ int a, b, c; cin >> a >> b >> c; G[i][a] = 1;G[i][b] = 1;G[i][c] = 1; } while(cin >> m){ if(!m) break; cnt = 1; Memset(vis, 0); dfs(m, 0); } return 0; }
哈密顿绕行世界问题 (DFS)
最新推荐文章于 2023-05-17 22:03:52 发布