尤拉迴路 (七橋問題)

2021-08-25 19:37:02 字數 964 閱讀 3905

/*

尤拉迴路:

有一條命為pregel的河流經過konigsberg。城中有七座橋,把河中的兩個島與河岸連線起來。是否存在一條路線,可以不重複地走完7座橋

尤拉道路實際上是一筆畫問題:尤拉圖必須滿足條件:圖連通並且沒有度數為奇數的節點

半 :連通+恰有2個度數為奇數的節點(這兩個頂點為初始和結束頂點,因為其他節點進出次數相等)

如何判定恰有兩個度數為奇數的節點:列舉即可

結論:有向圖:乙個節點的出度比入度大一,作為起始點,令乙個節點的入度比出度大一,作為結束點+ 圖連通

圖連通如何判定?

euler:尤拉*/

/*關鍵:

1 有向圖為半尤拉圖:乙個節點的出度比入度大一,作為起始點,令乙個節點的入度比出度大一,作為結束點+ 圖連通

2 尤拉叫euler,採用的方法是遞迴,根據某節點,列舉其所有後序節點,然後依次遞迴迴圈所有沒有被訪問過的節點

for(int j = 0; j < n;j++)

}*/#include #include #include using namespace std;

#define maxsize 1024

int n;

int graph[maxsize][maxsize];

int visit[maxsize][maxsize];

typedef enum type

type;

typedef struct edge

int _x;

int _y;

}edge;

stackstackedge;

void euler(int i,type type)//列印半尤拉圖時,要記住引數是起始節點

} }else

} }}

int main(int argc,char* argv)

問題G 尤拉迴路

尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號 節...

尤拉迴路 輸出尤拉迴路的路徑

有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...

尤拉迴路 UOJ117 尤拉迴路 題解

判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...