以颜色为节点,每个珠子是一条边,求欧拉回路
注意输出必须是这样,这种顺序
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int mp[55][55], mark[55];
int cnt[55];
int N;
void dfs( int x ){
for( int i = 1; i <= 50; i++ ){
if( mark[i] && mp[x][i] ){
mp[x][i]--;
mp[i][x]--;
dfs( i );
printf( "%d %d\n", i, x );
}
}
}
int main(){
int T, Case = 1;
scanf( "%d", &T );
while( T-- ){
scanf( "%d", &N );
memset( mp, 0, sizeof( mp ) );
memset( cnt, 0, sizeof( cnt ) );
memset( mark, 0, sizeof( mark ) );
for( int i = 0; i < N; i++ ){
int temp1, temp2;
scanf( "%d%d", &temp1, &temp2 );
mp[temp1][temp2]++;
mp[temp2][temp1]++;
cnt[temp1]++;
cnt[temp2]++;
mark[temp1] = mark[temp2] = 1;
}
bool flag = true;
for( int i = 1; i <= 50; i++ ){
if( cnt[i] % 2 ) flag = false;
}
if( Case != 1 ){
puts("");
}
if( !flag ){
printf( "Case #%d\nsome beads may be lost\n", Case++ );
}else{
printf( "Case #%d\n", Case++ );
for( int i = 1; i <= 50; i++ ){
if( mark[i] ){
dfs( i );
}
}
}
}
return 0;
}