• UVA 10054项链(欧拉回路)


    回路条件:

    1.所有点的度数必须为偶数。

    2.图必须连通。

    3.图必须首尾相接。

    思路:先统计度数,度数全为偶数,则找任意一点一路搜下去,并将搜到的边保存,

       如果最后保存的边不足n条,说明图不连通,如果是n条,判读是第一条和最后一条是否相接。

    #include <iostream>
    #include <cstring>
    #include <vector>
    using namespace std;
    struct edge
    {
    	int x,y;
    };
    int a[55][55],du[55];
    vector<edge> my;
    void jie(int u) //一路接下去,如果可以组成回路,肯定可以接出一条路径 
    {	edge t;
    	for(int v=1;v<=50;v++)
    	if(a[u][v])
    	{
    		a[u][v]--; a[v][u]--;
    		t.x=u; t.y=v;
    		my.push_back(t);
    		jie(v);
    	}
    }
    int main(int argc, char *argv[])
    {
    	int t,i,j,n,k=1,u,v;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		memset(a,0,sizeof(a));
    		memset(du,0,sizeof(du));
    		for(i=1;i<=n;i++)
    		{
    			cin>>u>>v;
    			a[u][v]++; a[v][u]++;
    			du[u]++; du[v]++; //统计度数 
    		}
    		int flag=1;
    		for(i=1;i<=50;i++)
    		    {if(du[i]%2) flag=0; break;}//存在奇度数,肯定不能组成回路 
    		if(flag)
    		{
    			my.clear();
    			jie(u);
    			if(my.size()!=n||my[0].x!=my[n-1].y) flag=0; //图是否连通,并且首位相接 
    		}
    		if(k!=1) cout<<endl;
    		cout<<"Case #"<<k<<endl; k++; 
    		if(!flag) cout<<"some beads may be lost"<<endl;
    		else 
    		{
    			for(i=0;i<my.size();i++)
    			cout<<my[i].x<<" "<<my[i].y<<endl;
    		}
    	}
    	return 0;
    }


  • 相关阅读:
    js-添加删除记录-修改
    js-添加删除记录-添加
    js-添加删除记录-删除
    dom增删改
    事件的冒泡
    div随鼠标在浏览器的窗口任意移动
    多选框全选练习
    python-day3
    python-day2
    python-day1
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3278134.html
Copyright © 2020-2023  润新知