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

来源:互联网 发布:交通灯单片机程序 编辑:程序博客网 时间:2024/05/22 05:10

   我们专业课(数学建模)讲的东西由七桥堡问题而来的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