MATLAB實現構造Euler環遊圖的演算法——數學建模

來源:互聯網
上載者:User

   我們專業課(數學建模)講的東西由七橋堡問題而來的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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.