欧拉回路模板
欧拉回路模板
从无向图中的一个节点出发走出一条道路,每条边恰好经过一次。这样的路线称为欧拉道路。
如果一个无向图是连通的,且最多只有两个奇点,则一定存在欧拉道路。如果有两个奇点,则必须从一个奇点出发,另一个奇点终止;如果奇点存在,则可以从任意点出发,最终一定会回到该点(称为欧拉回路)。
算法模板:
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))