我们专业课(数学建模)讲的东西由七桥堡问题而来的Euler环游。
如下图,要将其变为Euler环游图。

%首先给出一个矩阵(相邻表示1,不相邻表示0),用来表示图1。
v =
0 1 0 0 0 0 0 1
1 0 1 0 0 0 1 0
0 1 0 1 0 1 0 0
0 0 1 0 1 0 0 0
0 0 0 1 0 1 0 0
0 0 1 0 1 0 1 0
0 1 0 0 0 1 0 1
1 0 0 0 0 0 1 0
Euler1(v)%调用写好的函数
Euler1函数如下:
function f=Euler1(v)
%定义数组用来存放该行是否为奇数。如果为1则表示奇数
count=size(v);
rows=zero(1,count(1));
%第一步是找出奇数行,然后找遍历为1的坐标,准备为该坐标加1
%在此之前先判断该坐标的列标所对应的行是否为奇数,如果是则加1
%如果不是再判断下一个,如果直到完成也没有结果,输出提示。
%说明该图不能变成Euler图。如果可以直到的最后得到结果将结果输出。
%遍历所有行,找出和为奇数的行
for i=1:6
if rem(sum(v(i,:)),2 )~=0 %不等于0
%找到奇数行标记
rows(i)=1;
end
end
%按照原先的标记开始变为Euler图。
for i=1:6
if rows(i)==1
for j=1:6
if v(i,j)==1
if rows(j)==1
v(i,j)=2;
rows(i)=0; %再次赋值为0
break
end
end
end
continue
end
end
v%输出结果
最后得到的图为:

这个是没有考虑到权重的,如果要考虑权重的话,就要稍微复杂点了。
PS:恶补什么是Euler图:新浪博客
本文介绍了一种通过算法将特定图转化为Euler环游图的方法,并提供了具体的MATLAB实现代码示例。此外,还讨论了如何处理奇数度节点以确保最终图形满足Euler环游的要求。
1390

被折叠的 条评论
为什么被折叠?



