Loading......Next.

生来介为忙一场

 

hdoj 1878 欧拉回路

欧拉回路

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5820    Accepted Submission(s): 1987


Problem Description
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?
 

Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M;随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号)。当N为0时输入结
束。
 

Output
每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0。
 

Sample Input
3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
 

Sample Output
1 0

 

 

网上说要用并查集,唉~~不懂啊,算法白痴,按自己的思路做,欧拉回路每个节点必有偶数个度(通路可以有0个或2个为基数),基本思路就这样

 1#include<iostream>
 2using namespace std;
 3int d[1001],set[1001],a,b;
 4int main()
 5{
 6    int n,m,flag;
 7    while(cin>>n&&n)
 8    {
 9        for(int i=1;i<=n;i++)
10        {
11            d[i]=0;
12            set[i]=i;
13        }

14        cin>>m;
15        flag=0;        
16        while(m--)
17        {
18            cin>>a>>b;
19            if(set[a]>set[b])    //判断是否连通用
20                set[a]=set[b];
21            else
22                set[b]=set[a];
23            d[a]++;
24            d[b]++;
25        }

26        for(i=1;i<=n;i++)    //每个节点都必有偶数个度
27            if(d[i]&1)
28            {
29                flag=1;
30                break;
31            }

32        if(!flag)
33            for(i=1;i<=n;i++)
34                if(set[i]!=1)
35                {
36                    flag=1;
37                    break;
38                }

39        if(flag)
40            cout<<"0"<<endl;
41        else
42            cout<<"1"<<endl;
43    }

44    return 0;
45}


 

 

posted on 2011-11-25 11:12 bersaty 阅读(333) 评论(0)  编辑 收藏 引用 所属分类: HDOJ 做题报告


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜