1126 Eulerian Path

Posted CSU迦叶

tags:

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

主要考英语或者数学基础。

一幅连通图的奇点个数为0或2时才能够被一笔画。

连通图的判断用DFS来计数。

连通图+0个奇点:Eulerian

连通图+2个奇点:semi-Eulerian

非连通图/连通图+其他数量的奇点:non-Eulerian

AC代码

#include<cstdio>
#include<iostream>
#include<set>
#include<vector>
#include<map>
#include<algorithm>

using namespace std;

const int SUP = 100000000;
const int maxn = 510;

int degree[maxn] = {0};

int vNum,eNum;

vector<int> G[maxn];

int cnt = 0;
bool vis[maxn] = {0};

void DFS(int root){
	vis[root] = 1;
	cnt ++;
	for(int i=0;i<G[root].size();i++){
		int j = G[root][i];
		if(vis[j]==0)DFS(j);
	}
}

int main(){
	
	cin>>vNum>>eNum;
	
	for(int i=0;i<eNum;i++){
		int v1,v2;
		cin>>v1>>v2;
		degree[v1]++;
		degree[v2]++;
		G[v1].push_back(v2);
		G[v2].push_back(v1);
	}
	
	int oddN = 0;
	for(int i=1;i<=vNum;i++){
		if(degree[i]%2!=0){
			oddN ++;
		}
		printf("%d%s",degree[i],i==vNum?"\\n":" ");
	}
	
	DFS(1);
	
 	if(oddN==0&&cnt==vNum)printf("Eulerian\\n");
 	else if(oddN==2&&cnt==vNum)printf("Semi-Eulerian\\n");
 	else printf("Non-Eulerian");
	
	return 0;
}

以上是关于1126 Eulerian Path的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1126 Eulerian Path

1126 Eulerian Path (25 分)

PAT_A1126#Eulerian Path

PAT 1126 Eulerian Path

PAT 1126 Eulerian Path

1126. Eulerian Path (25)