SDNU__1088.欧拉路

本文介绍了一种通过代码实现欧拉路问题的方法。对于给定的有向图,通过统计每个节点的入度和出度来判断是否存在欧拉路径。文章提供了一个C++程序实例,演示了如何检查欧拉路径的存在性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1088.欧拉路

Time Limit: 1000 MS    Memory Limit: 32768 KB
Total Submission(s): 114    Accepted Submission(s): 32

Description

给定一个有向图,判断图是否是欧拉路。

Input

第一行为两个正整数n(1<=n<=1000),m(1<=m<=100000),表示图中的点数和边数。
之后m行每行两个整数a,b(0 < a, b <= n)表示a到b存在一条有向边。

Output

一行,若是欧拉路,输出YES,否则输出NO

Sample Input

5 5
1 2
2 3
2 4
4 5
5 2

Sample Output

YES
 
   
一直记得刚进队考的那个七桥问题,如今终于可以用代码实现了
欧拉路问题,我现在掌握的还比较浅显,在简单的构图统计入度和出度后
进行如下判断——每一个点的入度 = 出度 YES
	    ——有且仅存在两个点____一个入度比出度大一(起点)____一个入度比出度小一(终点)——YES
其余情况NO
比较容易忽略的是入度和出度同时为0的情况
 
   
 #include<iostream>
 #include<cstdio>
 #include<memory.h>
 using namespace std;
 int in[1005];
 int out[1005];
 int main()
{
 	int n ,m;
 	int a,b;
 	int flag = 0;
 	int innum = 0,outnum = 0;
 	scanf("%d %d",&n,&m); 
 	memset(in,0,sizeof(in));
 	memset(out,0,sizeof(out));
 	for(int i = 0;i < m;i++)
 	{
 		cin>>a>>b;
 		out[a]++;
 		in[b]++;
	 }
	
 	for(int i = 1;i <= n;i++)
 	{
 		if(in[i] == 0 && out[i] == 0)
 		{
 			flag = 1;
		 }
 		if(in[i] == out[i])
 		{
 			continue;	
		 }	
		 if(in[i] - out[i] == 1)
		 {
		 	innum ++;
		 }
		 if(out[i] - in[i] == 1)
		{
		 	outnum ++;
		}
	 }
	 if(innum + outnum > 2)
	 {
	 	flag = 1;
	 }
	 if(flag)
	 {
		 	cout<<"NO"<<endl;
	}
	else
	{
		cout<<"YES"<<endl;
	}
	
 	return 0;
} 

 
   
 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值