码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 10054 The Necklace

时间:2014-08-29 20:07:58      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:uva   图论   

题意:

项链散了  每个珠子前端后端分别有颜色  在项链中  相邻的珠子的相邻的那一端颜色相同  问  找到的珠子能不能重新串起一根项链

思路:

比较经典的欧拉回路题  Fleury算法解决问题

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define M 60

int n,ans,top,m,t,T;
int Edge[M][M],path[M*M],d[M];
struct Stack
{
    int node[M*M];
    int top;
}s;

void dfs(int x)
{
    for(int i=1;i<=n;i++)
	{
        if(Edge[i][x])
		{
            Edge[i][x]--;
            Edge[x][i]--;
			s.node[++s.top]=i;
            dfs(i);
            break;
        }
    }
}

void Fleury(int x)
{
    int i,b;
    top=0;
    s.top=0;
	s.node[0]=x;
    while(s.top>=0)
	{
        b=0;
        for(i=1;i<=n;i++)
		{
            if(Edge[s.node[s.top]][i])
			{
                b=1;
				break;
            }
        }
        if(b==0) path[top++]=s.node[s.top--];
        else dfs(s.node[s.top]);
    }
}

int main()
{
	int i,u,v;
	n=50;
	scanf("%d",&T);
	for(t=1;t<=T;t++)
	{
	    if(t!=1) puts("");
	    printf("Case #%d\n",t);
	    memset(d,0,sizeof(d));
	    memset(Edge,0,sizeof(Edge));
	    scanf("%d",&m);
	    for(i=1;i<=m;i++)
        {
            scanf("%d%d",&u,&v);
            d[u]++;
            d[v]++;
            Edge[u][v]++;
            Edge[v][u]++;
        }
		for(i=1;i<=n;i++)
        {
            if(d[i]%2==1) break;
        }
        if(i<=n)
        {
            puts("some beads may be lost");
            continue;
        }
		for(i=1;i<=n;i++)
        {
            if(d[i]) break;
        }
        Fleury(i);
        for(i=0;i<top;i++) d[path[i]]=0;
        for(i=1;i<=n;i++)
        {
            if(d[i]) break;
        }
        if(i<=n)
        {
            puts("some beads may be lost");
            continue;
        }
        for(i=1;i<top;i++) printf("%d %d\n",path[i-1],path[i]);
	}
	return 0;
}


UVA 10054 The Necklace

标签:uva   图论   

原文地址:http://blog.csdn.net/houserabbit/article/details/38929521

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!