zoukankan      html  css  js  c++  java
  • PAT 甲级 1126 Eulerian Path (25 分)

    思路:

    1.结点度数全为偶数的为欧拉回路;
    2.度数为奇数的结点数量为1或大于3的为非欧拉路径;
    3.度数为奇数的结点数量为2的为欧拉路径;
    (PS:很多大佬讲这是根据题意得出的,本杠精小声bb一下,除了第一点题目也没说数量为2的就一定有欧拉路径,当然了每个人理解可能不一样,2、3两点稍微推理下也能得出来)
    4.非连通图没有欧拉回路或者欧拉路径;

    代码:

    #include<iostream>
    #include<vector>
    using namespace std;
    bool isv[501];
    vector<vector<int>> v;
    void dfs(int n){
    	isv[n]=true;
    	for(int i=0;i<v[n].size();i++)
    		if(!isv[v[n][i]]) dfs(v[n][i]);
    }
    int main(){
    	int n,m;
    	scanf("%d%d",&n,&m);
    	v.resize(n+1);
    	for(int i=1;i<=m;i++){
    		int a,b;
    		scanf("%d%d",&a,&b);
    		v[a].push_back(b);
    		v[b].push_back(a);
    	}
    	int cnt=0;
    	for(int i=1;i<=n;i++){
    		printf(i==1?"%d":" %d",v[i].size());
    		if(v[i].size()%2) cnt++;
    	}
    	if(cnt==1||cnt>2) printf("
    Non-Eulerian");
    	else{
    		dfs(1);
    		bool iscon=true;
    		for(int i=1;i<=n;i++)
    			if(!isv[i]) iscon=false;
    		if(!iscon) printf("
    Non-Eulerian");
    		else if(cnt==0) printf("
    Eulerian");
    		else if(cnt==2) printf("
    Semi-Eulerian");
    	}
    	return 0;
    }
    
  • 相关阅读:
    C#高级编程第11版
    做点字符串题
    Codeforces Round #681 (Div. 1, based on VK Cup 2019-2020
    Educational Codeforces Round 97 题解
    AtCoder Regular Contest 106 题解
    Kick Start Round G 2020 题解
    CCSP 2020题解
    Codeforces Round #675 (Div. 2) 题解
    AtCoder Regular Contest 104
    Kick Start Round F 2020 题解
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309048.html
Copyright © 2011-2022 走看看