题目大意
给出两个数字是一条边,然后找出任意一个欧拉回路。
无向图欧拉回路的条件:
1. 要联通
2. 每个节点度必须是偶数
这个简单题目卡了我一下午,结果就是少输出了空行;
AC代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MX = 1e3+5;
int m[MX][MX],IN[MX];
void init()
{
memset(IN,0,sizeof IN);
memset(m,0,sizeof m);
}
void dfs(int st)
{
for(int i=1;i<=50;i++) {
if(m[st][i]<=0) continue;
m[st][i]--;m[i][st]--;
dfs(i);
printf("%d %d\n",i,st);
}
}
void solve(int st,int n)
{
for(int i=1;i<=n;i++) {
if(IN[i]%2==0) continue;
puts("some beads may be lost");
return ;
}
for(int i=0;i<=50;i++)dfs(i);
}
int main()
{
int _;//freopen("in.txt","r",stdin);
scanf("%d",&_);
for(int cas=1;cas<=_;cas++) {
int n,u,v,st;init();
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d%d",&u,&v);
IN[u]++;IN[v]++;st = u;
m[v][u]++;m[u][v]++;
}
printf("Case #%d\n",cas);
solve(st,n);
puts("");
}
return 0;
}