您的位置:首页 > 其它

uva 10054 欧拉回路

2015-07-18 00:21 246 查看
以颜色为节点,每个珠子是一条边,求欧拉回路

注意输出必须是这样,这种顺序

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: