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

本文介绍了一种通过算法将特定图转化为Euler环游图的方法,并提供了具体的MATLAB实现代码示例。此外,还讨论了如何处理奇数度节点以确保最终图形满足Euler环游的要求。

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

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值