欧拉回路模板

依然范特西╮ 提交于 2019-12-05 05:04:33

欧拉回路模板

从无向图中的一个节点出发走出一条道路,每条边恰好经过一次。这样的路线称为欧拉道路。

如果一个无向图是连通的,且最多只有两个奇点,则一定存在欧拉道路。如果有两个奇点,则必须从一个奇点出发,另一个奇点终止;如果奇点存在,则可以从任意点出发,最终一定会回到该点(称为欧拉回路)。

算法模板:

int P,Q,con;//con用于记录连通点的个数
int Euler(){
int cont=0;//统计奇度点的个数
queue<int>q;
q.push(1);
visit[1]=1;
while(!q.empty()){
int t=q.front();
q.pop();
con++;
int sum=0;//记录这个点的边数
for(int i=1;i<=P;i++){
if(Map[t][i]){
if(!visit[i]){
visit[i]=1;
q.push(i);
}
sum++;
}
}
if(sum%2){
cont++;
}
}
return cont;
}

在main函数中

加上

if((cont==0 || cont==2) && P==con)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!