bool v[maxn];vector<int> ans;bool maze[maxn][maxn];void Hamilton(int n) { ans.clear(); int s = 1 , t; int i , j; M(v); for(i = 1; i <= n; ++i) if(maze[s][i]) break; t = i; v[s] = v[t] = 1; ans.pb(s); ans.pb(t); while(1) { while(1) { for(i = 1 ; i <= n ; ++i){ if(maze[t][i] && !v[i]) { ans.pb(i); v[i] = 1; t = i; break; } } if(i > n) break; } reverse(all(ans)); swap(s , t); while(1) { for(i = 1; i <= n; ++i) { if(maze[t][i] && !v[i]) { ans.pb(i); v[i] = 1; t = i; break; } } if(i > n) break; } if(!maze[s][t]) { for(i = 1; i <= ans.size() - 2; ++i) { if(maze[ans[i]][t] && maze[s][ans[i + 1]]) break; } i++; t = ans[i]; reverse(ans.begin() + i , ans.end()); } if(ans.size() == n) return; for(j= 1; j <= n; ++j) { if(v[j]) continue; for(i = 1; i < ans.size() - 2; ++i) { if(maze[ans[i]][j]) break; } if(maze[ans[i]][j]) break; } s = ans[i - 1]; t = j; reverse(ans.begin() , ans.begin() + i); reverse(ans.begin() + i ,ans.end()); ans.pb(j); v[j] = 1; } return;}
新闻热点
疑难解答