- 图中的度:所谓顶点的度(degree),就是指和该顶点相关联的边数。
- 在有向图中,度又分为入度和出度。
- 入度 (in-degree) :以某顶点为弧头,终止于该顶点的弧的数目称为该顶点的入度。
- 出度 (out-degree) 是指以某顶点为弧尾,起始于该顶点的弧的数目。
- 在某顶点的入度和出度的和称为该顶点的度
- 定义:
- 欧拉回路:每条边恰好只走一次,并能回到出发点的路径
- 欧拉路径:经过每一条边一次,但是不要求回到起始点
- 欧拉回路存在性的判定:
- 一、无向图
- 每个顶点的度数都是偶数,则存在欧拉回路。
- 二、有向图(所有边都是单向的)
- 每个节顶点的入度都等于出度,则存在欧拉回路。
- 欧拉路径存在性的判定:
- 一。无向图
- 一个无向图存在欧拉路径,当且仅当 该图所有顶点的度数为偶数 或者 除了两个度数为奇数外其余的全是偶数。
- 二。有向图
- 一个有向图存在欧拉路径,当且仅当 该图所有顶点的度数为零 或者 一个顶点的度数为1,另一个度数为-1,其他顶点的度数为0。
- 假设要满足欧拉回路有两个条件。1.所有顶点的度数所有是偶数2.必须保证是一个联通图
-
#include<bits/stdc++.h> using namespace std; #define maxn 1555 int n,m,num[maxn],u,v; vector<int>mmp[maxn]; bool flag,vis[maxn]; void dfs(int x) { vis[x]=1; int len=mmp[x].size(); for(int i=0; i<len; i++) if(!vis[mmp[x][i]]) dfs(mmp[x][i]); } int main() { while(cin>>n>>m) { flag=1; memset(mmp,0,sizeof(mmp)); memset(num,0,sizeof(num)); memset(vis,0,sizeof(vis)); while(m--) { cin>>u>>v; mmp[u].push_back(v); mmp[v].push_back(u); num[u]++; num[v]++; } dfs(1); for(int i=1; i<=n; i++) if(num[i]%2||!vis[i]) { flag=0; break; } if(flag)cout<<1<<endl; else cout<<0<<endl; }