您的位置:首页 > 编程语言 > MATLAB

MATLAB实现构造Euler环游图的算法——数学建模

2010-04-30 21:02 656 查看
我们专业课(数学建模)讲的东西由七桥堡问题而来的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图:http://blog.sina.com.cn/s/blog_49c240bb0100icgp.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐