【轉】MATLAB實現構造Euler環遊圖的演算法——數學建模
阿新 • • 發佈:2019-01-27
我們專業課(數學建模)講的東西由七橋堡問題而來的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%輸出結果
最後得到的圖為:
這個是沒有考慮到權重的,如果要考慮權重的話,就要稍微複雜點了。