欧拉回路 [邻接矩阵]

[复制链接]
发表于 2024-1-2 18:03:04 | 显示全部楼层 |阅读模式

【问题描述】在一个无向图中,一条包含所有边,且其中每一条边只经过一次的路径叫做欧拉通路。若这条路径的起点与终点为同一点,则为欧拉回路。请找出图中的欧拉回路。
判定一个图是否存在欧拉通路或欧拉回路:定理1:一个图有欧拉回路当且仅当它是连通的(即不包括0度的结点)且每个结点都有偶数度。
定理2:一个图有欧拉通路当且仅当它是连通的且除两个结点外,其他结点都有偶数度。
定理3:在定理2的条件下,含奇数度的两个结点中,一个必为欧拉通路的起点,另一个必为终点。
int G[N][N];  // 无向图的邻接矩阵。如果两点连通,则为1,否则为0 int cnt[N]; int circuit[N], pos; int start,oddnumber;
void search(int i)
{  for (int j=0; j<n; j++)   if (G[j]==1)
  {
   G[j]=G[j]=0;    search(j);
  }
circuit[pos++]=i;
}
bool find_circuit()      // 返回false表示无欧拉回路
{  start=oddnumber=0;  memset(cnt, 0, sizeof(cnt));  for (int i=0; i<n; i++)    // 统计结点入度   for (int j=0; j<n; j++)    cnt+=G[j];
for (int i=0; i<n; i++)   if (cnt%2==1)
  {
   start=i;
   oddnumber=oddnumber+1;
  }
  if (oddnumber>2 || oddnumber==1)   return false;  else
{   pos=0;   search(start);
for (int i=0; i<pos; i++)
   cout<<circuit<<"--->"<<endl;
}
return true;
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表