欧拉回路模板

131 阅读1分钟

欧拉回路模板

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

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

算法模板:

	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)