計蒜客 農場看守(簡單的尤拉迴路)

2021-08-13 06:22:43 字數 1353 閱讀 5055

蒜頭君最近做了農場看守,他每天晚上的工作就是巡視農場並且保證沒有人破壞農場。從穀倉出發去巡視,並且最終回到穀倉。

蒜頭君視力不太好,其他農場守衛只需要對農場的每一條連線不同場地的路走一遍就可以發現是不是有異常情況了。但是他很仔細和耐心,對農場的每一條連線不同場地的路需要走兩遍,並且這兩遍必須是不同的方向,因為他覺得應該不會兩次都忽略農場中的異常情況。

每兩塊地之間一定至少有一條路連線。現在的任務就是幫他制定巡視路徑。

輸入格式

第一行輸入兩個整數

n(2

≤ n ≤ 10000)n

(2≤n

≤10000)

和m(1

≤ m ≤ 50000)m

(1≤m

≤50000)

,表示農場一共有n塊地

m條邊。

第二到m+1

行輸入兩個整數,表示對應的兩塊地之間有一條邊。

輸出格式

輸出

2m+1

個數,乙個數占一行,表示蒜頭君巡查路徑上地的標號,

1 號為穀倉,從

1 開始,以

1 結束。如果有多種答案,輸出任意一種。

本題答案不唯一,符合要求的答案均正確

樣例輸入

4 51 21 4

2 32 4

3 4

樣例輸出

1

2342

1432

41一開始看,想到的是設定乙個vis[a][b]的陣列,從頭開始走,只要vis[a][b]是false就可以去訪問,讓陣列內元素都為真便實現了全部訪問兩邊。但是無法實現從1出發再回到1。看了老師的題解後知道了這是簡單的尤拉迴路。題解如下。

注意cout一定要在dfs函式之後因為實際程式的訪問順序是 先把和1有關的全訪問了然後返回再訪問其他的,第一次執行到底返回就輸出了1,然後最後一次返回輸出另乙個1。

#include#include#includeusing namespace std;

int n,m;

struct edge

edge(int v,bool vis):v(v),vis(vis){}

}edges[20020];//要記得開的大一些否則會出現答案錯誤。

vectorg[50010];

void euler(int u)

euler(1);

return 0;

}

計蒜客 農場看守(尤拉迴路)

問題描述 蒜頭君最近做了農場看守,他每天晚上的工作就是巡視農場並且保證沒有人破壞農場。從穀倉出發去巡視,並且最終回到穀倉。蒜頭君視力不太好,其他農場守衛只需要對農場的每一條連線不同場地的路走一遍就可以發現是不是有異常情況了。但是他很仔細和耐心,對農場的每一條連線不同場地的路需要走兩遍,並且這兩遍必須...

關於一些簡單的 尤拉迴路 問題

關於尤拉迴路 若為有向圖 每個點入度 出度 則存在尤拉迴路 若為無向圖 每個點所連邊為偶數 則存在尤拉迴路 看上去很好理解 但是在處理實際問題時 往往要用到並查集 map,和很棘手的操作 有幾道題,推一下 1 1 include2 3using namespace std 45 intn 67 ch...

計蒜客 蒜頭跳木樁 ( LIS的簡單變種)

蒜頭君面前有一排 n n 個木樁,木樁的高度分別是h 1,h 2,h 3 cdots h nh1 h2 h3 hn 蒜頭第一步可以跳到任意乙個木樁,接下來的每一步蒜頭不能往回跳只能往前跳,並且跳下乙個木樁的高度 不大於 當前木樁。蒜頭君希望能踩到盡量多的木樁,請你幫蒜頭計算,最多能踩到多少個木樁。第...