題意:
給一個圖,求一種從點1出發,經過所有邊恰好兩次回到點1的方案,數據保證有解。
分析:
歐拉回路,改下次數就好了。
代碼:
//poj 2230 //sep9 #include#include #include using namespace std; const int maxN=10024; const int maxM=50048; int head[maxN]; int used[maxM*2]; vector path; struct Edge { int v,nxt; }edge[maxM*2]; int e,n,m; void dfs(int u) { for(int i=head[u];i!=-1;i=edge[i].nxt){ int cur=i|1; if(used[cur]<2){ int v=edge[i].v; ++used[cur]; dfs(v); path.push_back(v); } } } int main() { scanf("%d%d",&n,&m); int i; e=0; memset(head,-1,sizeof(head)); memset(used,0,sizeof(used)); path.clear(); for(i=1;i<=m;++i){ int u,v; scanf("%d%d",&u,&v); edge[e].v=v;edge[e].nxt=head[u];head[u]=e++; edge[e].v=u;edge[e].nxt=head[v];head[v]=e++; } dfs(1); reverse(path.begin(),path.end()); printf("1\n"); for(i=0;i