UVA 10054(DFS_G题)解题报告

Posted caomingpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 10054(DFS_G题)解题报告相关的知识,希望对你有一定的参考价值。

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=995

------------------------------------------------------------------------------------------------------------------------------------------------------------------

题意:给你n个珠子,一个珠子分为两半有两种颜色,用1到50来表示50种不同的颜色。把这些珠子串起来,两个紧挨着的珠子要满足是接触部分颜色相同。

思路:本质是无向图的欧拉回路,所有的点的度是否为偶数,且连通的图为欧拉图(存在欧拉回路)然后dfs逆序输出路径,一定要逆序。

代码:

技术分享图片
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int N =50+5;

int g[N][N],vis[N];
int deg[N];
int n;


void euler(int u)
{
    int v;
    for(v=1; v<=50; v++) 
        if(g[u][v])
        {
            g[u][v]--;
            g[v][u]--;
            euler(v);
            printf("%d %d\n",v,u);
        }
}
int main()
{
    int t,T;
    int i;
    int u,v;
    int flag =0;
    scanf("%d",&T);
    for(t=1 ;t<=T; t++)
    {    
        flag =0;
        for(int p =0;p<N;p++){
            for(int q= 0;q<N;q++){
                g[p][q]=0;
            }
            deg[p]=0;
            vis[p]=0;
        }
        scanf("%d",&n);
        for(i=1 ;i<=n; i++)
        {
            scanf("%d %d",&u,&v);
            deg[u]++;
            deg[v]++;
            g[u][v]++;
            g[v][u]++;
        }
        printf("Case #%d\n",t);

        for(i=1 ;i<=50; i++){
            if( deg[i]%2 ) {
                flag =1;
            }
        }
        if(flag) printf("some beads may be lost\n");
        else {
            for(i=1; i<=50; i++)
                euler(i);
        }
        if(t!=T) printf("\n");
    }
    return 0;
}
View Code

 

以上是关于UVA 10054(DFS_G题)解题报告的主要内容,如果未能解决你的问题,请参考以下文章

欧拉回路UVA - 10054 The Necklace

UVA 11995 (STL_E题)解题报告

UVA 10815 (STL_C题)解题报告

UVA 12627(递推&递归_H题)解题报告

UVA 12034(递推&递归_I题)解题报告

UVa -1584 Circular Sequence 解题报告