分值 : 25 难度 : 中等题 思路 : 一开始以为简单的存一下入度就可以了,结果需要判断是否联通 坑点 : 存在点入度为零 和 是否联通 不等价 ,发现之后 DFS 写错,DFS都写错 真TM菜
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
#include <iostream>using namespace std;int rudu[501] ;int map[501][501] ;int cnt = 0 ;int flag[501];void dfs(int x ,int n){ cnt ++ ; flag[x] =1 ; for(int i = 1 ;i<=n ; i++ ) { if(flag[i]) continue ; if(map[x][i]) { dfs(i , n) ; } }}int main() { int N, M; cin >> N >> M; for(int i = 0 ; i< M ; i++) { int c1 ,c2 ; cin >>c1 >>c2; if(map[c1][c2]==0) { rudu[c1]++ ; rudu[c2]++ ; } map[c1][c2] =1 ; map[c2][c1] =1 ; } int count = 0 ; dfs(1,N) ; for(int i = 1 ; i<= N ; i++) { if(rudu[i]%2 == 0) count ++ ; if(i!=1) cout << " "; cout << rudu[i] ; } cout << endl ; if(count == N && cnt ==N) cout <<"Eulerian"<<endl ; else if(count == N-2 && cnt ==N ) cout <<"Semi-Eulerian"<<endl ; else cout <<"Non-Eulerian"<<endl ;}