欧拉回路模板

欧拉回路模板

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

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

算法模板:

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))

posted @ 2019-11-21 21:07  fun-debug  阅读(158)  评论(0编辑  收藏  举报