题目地址:POJ 1041
题目要求是字典序,所以要先对边号进行排序,使得每次总是先遍历到边号较小的点。用vector比较方便。
代码如下:
#include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define pi acos(-1.0) const int mod=1e9+7; const int INF=0x3f3f3f3f; const double eqs=1e-9; const int MAXN=2000+10; int stk[2000000], deg[2000000], tot, vis[2000000]; vector >vec[MAXN]; void add(int u, int v, int id) { vec[u].push_back(make_pair(id,v)); vec[v].push_back(make_pair(id,u)); } void dfs(int u) { for(int i=0;i 0) puts("Round trip does not exist."); else{ for(i=1;i<=n;i++){ if(vec[i].size()) sort(vec[i].begin(),vec[i].end()); } dfs(1); if(tot =0;i--){ printf("%d",stk[i]); if(i) printf(" "); } printf("\n"); } } } return 0; }