poj 1300 尤拉迴路 通路 解題報告

2022-07-28 22:21:25 字數 2196 閱讀 4868

最近學了一些dp的皮毛之後,現在開始圖論知識的學習,說實話,初步不知道怎麼弄這個,然後無意間在網上下了一本關於圖論的演算法設計程式的教程,然後感覺還不錯,結果後面才發現原來多年前,我的師兄就給了我這樣一本好的資料。

感覺有點小悲催啊。。~   有點對不起師兄的感覺,然後今天終於寫了乙個小知識點,尤拉迴路的一題,其實這個也包含了通路的知識。

還是說一下題意吧。。 

現在你是乙個豪宅的管家,因為你有個粗心的主人,所以需要你來幫忙管理,輸入會告訴你現在一共有多少個房間,然後會告訴你從哪個房間出發,你的任務就是從出發的房間通過各個房間之間的通道,來把所有的門都關上,然後最後回到0的房間。

一開始寫的時候,我想因為我自己不是很熟悉圖論的知識點,所以我就想用模擬的方法來做一做,結果讓我碰對了,說實話  我不知道這樣的深搜都可以過。。

view code

1   #include2   #include3

using

namespace

std;

4int graph[22][22

]; 5

intn,count,edgetotal,flag;

6void dfs(inti)7

//當你回到0房間的時候已經關閉了所有的門,那麼就可以完成

10for(int j=0;j)

11 23}

24}25int

main()

26sub++;

36while(sub10+(temp[sub]-48);sub++;}

37    memset(graph,0,sizeof

(graph));

38for(int i=0;i)

3946    graph[i][end]++;

47    graph[end][i]++;

48    edgetotal++;49}

50}51gets(temp);

52dfs(start);

53if(flag)printf("

yes %d\n

",edgetotal);

54else

55    printf("

no\n");

56}57return

0; 58}

59其實實際上,最好的解題方法還是來自圖論當中的知識,相信有一點圖論知識的人都知道,現在給你n個節點,那麼這些節點當中如果每個節點的度都是偶數的話,那麼一定可以從乙個點出發然後回到這個點,並且訪問整個路徑當中的邊。

60如果是要測試出通路的話,那麼就是檢查是否存在兩個度為基數的節點,兩個節點分別為起點和終點。

61   #include62   #include63

using

namespace

std;

64int

main()

6584    door[i]++;

85    door[end]++;

86    door_total++;87}

88}89gets(temp);

90    door_num=0;91

for(int i=0;i)

92

95if(door_num==0&&door_start==0)printf("

yes %d\n

",door_total);

96//

如果不存在基數度的節點,那麼當起點是0的時候,一定可以完成迴路,訪問所有的邊。

97else

98if(door_num==2&&door[0]%2==1&&door[door_start]%2==1&&door_start!=0)printf("

yes %d\n

",door_total);//

如果基數點為2的話,那麼當兩個基數點為起點和終點的時候,此時只要終點與起點不重合,那麼就可以完成通路,訪問所有的邊。

99else

100    printf("

no\n");

101}

102return

0;

103   }

POJ 1300 判斷尤拉迴路

題意 能否找到一條路徑經過所有開著門的房間,並使得 1 通過門後立即把門關上,2 關上的門不在開啟,3 最後回到你自己的房間 房間0 並且所有的門都已經關閉。題目已知這是連通圖。分析 以房間為頂點,連線房間之間的門為邊構造圖。根據題意,輸入檔案的每個測試資料所構造的圖都是連通的。本題實際上是判斷乙個...

尤拉迴路的判定 poj 1300

這個題卡了一上午卡到心態 卡到欲仙欲死。各種bug蜜汁出現。一邊一遍的除錯,忽然發現思考成熟是多麼的重要!最後是乙個短路效應的問題,懷疑人生!這個題就是統計出度和入度,就是建圖有點麻煩,其實也不算太麻煩了。對於無向圖而言就是 判斷是否滿足沒有奇度頂點,或者奇度定點只有兩個,並且這兩個奇度頂點其中乙個...

POJ 1300 閱讀理解 噁心輸入 尤拉迴路

題意不太好理解.大致上 是從某個指定的房間出發.問能否回到0房間.並且關掉圖中所有的門.而門是關上後無法開啟的.輸入比較奇葩.我是gets讀入一行後再處理的.再抽象一些.把門開作邊.那麼相當於找一條路徑.使得便利所有的邊.且每個邊只遍歷一次.這裡分為兩種情況.一種是從0出發.走完所有的邊回到0.這是...