【模板】无向图欧拉回路和欧拉路径判断
题面
版子不多讲
#include <iostream> #include <cstring> using namespace std; const int MAX_N = 100; const int MAX_M = 10000; struct edge { int v, next; int len; } E[MAX_M]; int p[MAX_N], eid; void init() { memset(p, -1, sizeof(p)); eid = 0; } void insert(int u, int v) { E[eid].v = v; E[eid].next = p[u]; p[u] = eid++; } int n,m; int degree[MAX_N]; int euler(){ int first = 0,last = 0; for(int i = 1;i <= n;i++){ if(degree[i]<-1 || degree[i] > 1){ cout<<"It doesn't have an euler path!"<<endl; return 0; }else if(degree[i] == -1){ if(first != 0){ cout<<"It doesn't have an euler path!"<<endl; return 0; }else{ first = i; } }else if(degree[i] == 1){ if(last != 0 ){ cout<<"It doesn't have an euler path!"<<endl; return 0; }else{ last = i; } } } if(first == 0 && last == 0){ cout<<"It has an eluer circuit!"<<endl; return 1; }else if(first != 0 && last != 0){ cout<<"It has an euler path!"<<endl; return first; } } int main() { init(); memset(degree,0,sizeof(degree)); cin>>n>>m; for(int i=0;i<m;i++){ int u,v; cin>>u>>v; insert(u,v); degree[u]--; degree[v]++; } euler(); return 0; }