idea:如果通奇数个桥的城区多于两个,则不存在欧拉回路;
如果只有两个通奇数个桥,则可以从这两个城区之一出发找到欧拉回路
如果没有一个城区通奇数个桥,这无论从哪里出发,都能找到欧拉回路
算法:EulerCircuit
输入:二维数组mat[n][n]
输出:度为奇数的顶点个数count
1.count=0;
2.下标i从0~n-1重复执行下述操作:
2.1:计算第i元素之和degree;
2.2: 如果degree为奇数,则count++;
3.返回 count++;
#include<stdio.h>
int EulerCircuit(int mat[10][10],int n);
int main()
{
int mat[10][10]={{0,1,2,2},{1,0,1,1},{2,1,0,0},{2,1,0,0}};
int num=EulerCircuit(mat,4);
if(num>2)
printf("不存在欧拉回路\n");
else if(num==0||num==2)
printf("存在欧拉回路\n");
return 0;
}
int EulerCircuit(int mat[10][10],int n)
{
int i,j,degree,count=0;
for(i=0;i<n;i++)
{
degree=0;
for(j=0;j<n;j++)
{
degree=degree+mat[i][j];
}
if(degree%2!=0)
count++;
}
return count;
}
哥尼斯堡七桥问题(欧拉回路)
最新推荐文章于 2021-05-31 23:31:43 发布