欧拉图
欧拉路径:每条边经过且只经过一次的路径
欧拉回路:如果从某个点出发,经过且只经过每条边一次,最后又回到这个点的路径
欧拉图:存在欧拉回路的图
图:
平凡图:只含有一个点
重边:两点之间有多条边
自环:从某点出发且不经过其他任何点又回到该点
简单图:没有自环和重边的图
完全图:任何两点之间都有边相连
子图:点和边都小于或等于原图,但这部分点的连接方式都与原图相同
结点的度:关联到结点的边的条数
入度:有向图入边的数目
出度:有向图出边的数目
例题:总共有n个点,给出m组的a,b的值,以为者a,b之间有一条边相连,如何判断这个图是不是欧拉图
for(int i=0;i<m;i++){
cin>>a>b;
deg[a]++;
deg[b]++;}
bool ok=true;
for(int i=0;i<n;i++){
if(deg[i]%2!=0){
ok=false;
break;}}
if(ok)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
例2:给出一个连通的有向图u,问这个图是不是欧拉图
for(int i=0;i<m;i++)
{cin>>u>>v;
out[u]++;
in[v]++;}
bool ok=true;
for(int i=0;i<n;i++){
if(in[i]!=out[i]){
ok=flase ;
break;}
}
if(ok)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
欧拉回路:
无向图: 每个顶点的度数都是偶数,则存在欧拉回路。
有向图: 每个顶点的入度都等于出度,则存在欧拉回路。
欧拉路径:
无向图: 当且仅当该图所有顶点的度数为偶数 或者 除了两个度数为奇数外其余的全是偶数。
有向图: 当且仅当该图所有顶点 出度=入度 或者 一个顶点 出度=入度+1,另一个顶点 入度=出度+1,其他顶点 出度=入度。