poj 1780 code(尤拉迴路+模擬棧)
題意:(題意較複雜)大致思想是給你乙個n,表示乙個由0-9數字構成的n位密碼.這個解鎖過程如下:鎖一直讀入所有內容.只要當它最後讀入的n個數字與密碼吻合,那麼就表示解鎖了.現在要你輸出乙個長度為10^n+n-1的數字序列,這個數字序列包括了n位密碼的所有可能.(也就是說輸入這個序列,必定解鎖)
分析:首先題目中說了對於n位密碼,鎖中存了乙個n-1位的當前狀態.
可以證明:所有10^(n-1)個狀態(一共這麼多個
,可以自己算算)中,任意乙個狀態都有一條出邊(由0-9構成)和一條入邊(由0-9構成),且出邊數==入邊數(
這個可以自己假定
n=1,n=2
驗證一下
,注意這裡可能存在
0000
這種自環
). 所有這個鎖的狀態圖是乙個尤拉圖,可以找到乙個尤拉迴路,正好可以將該尤拉圖的所有邊走僅一次.(走過所有邊一次等同於遍歷了所有可能的
n位密碼一次
,想想是不是)
所以對於這道題,我們只需要輸出其狀態圖的尤拉迴路即可.不過既然要輸出尤拉迴路,就要遍歷所有的可行邊.但是這個圖中的邊是無數的重複0-9的數字,我們如何標記每一條邊呢?
假設n=4,我們用4321(四千三百二十一)表示一條從432狀態經過數字1出去的邊.這種表示方式我們可以保證可以不重複的標記該狀態圖中的所有邊.
注意(假設n=4)0000一定是乙個可能的密碼,所以我們把最終結果速度ans的0-3位設為0,且標記vis[0]為true(表示從狀態000經0邊出去的,這是乙個自環.從000經過0邊依然是到000狀態.注意
:我們標記的是每一條邊
,不是每個狀態節點).
剩下的就是模擬棧來列印尤拉路徑的事了.這有點麻煩.注意這裡我們模擬的過程如下:首先初始狀態是狀態0,下面
從狀態0走邊
00到狀態0,(00)
從狀態0走邊
01到狀態1,(001)
從狀態1走邊
10到狀態0,(0010)
從狀態0走邊
02到狀態2,(00102)
從狀態2走邊
00到狀態0,(001020)
從狀態0走邊
03到狀態3,(0010203) …
當前我們的ans陣列已經為(
0010203040506070809) 了,我們當前狀態是9,且90這條邊我們沒走過,所以我們將走90邊:
從狀態9走邊
90到狀態0,( 00102030405060708090)
此時我們發現我們現在在狀態0,但是0節點的所有出邊我們已經走過了一遍(也就是說我們進到0狀態就出不去了),這樣我們輸出不了尤拉迴路了,說明我在狀態9的時候不應該先走邊90,而應該去走邊91,92…等,然後我們通過某條邊x9回到了狀態9之後,最後走邊90結束尤拉迴路的過程.(因為起點是狀態0,終結點也是狀態0)
所以對於我們已經從9走了邊90到了死胡同0狀態,我們應該回退該過程,即標記90邊未走過,且把當前狀態重新設為9,且我們選擇邊的起點應該從91(即0的下乙個位置)開始選.
上面這個過程是用陣列棧模擬深度優先遍歷的過程,而不是模擬euler函式的過程.(但是我們如何證明深度優先遍歷就一定能輸出尤拉迴路呢
?這個問題我還不知道
,其實就是
euler
遞迴函式如何非遞迴實現的問題)
ac**:
#include#includeusing namespace std;
const int maxn=1000000+10;
char ans[maxn];//儲存最終的結果
bool vis[maxn];//標記邊是否被走過
int main()
int mod=1,end=1;
for(int i=1;i<=n;i++)
mod /=10;
end+=n-1;
for(int i=0;i489ms
}return 0;
}
POJ 1780 Code 尤拉路徑
題意 破解一套1 6位長度密碼的系統,尋找這樣乙個序列 對於n位的密碼10 n n 1長度的連續的長為n的串能夠列舉完所有的密碼。解法 構圖之後直接dfs會超記憶體,因此需要使用棧來實現。調了很久。如下 include include include include include using na...
poj1386 尤拉迴路)
題目鏈結 解題思路 把每個單詞當成是一條有向邊。把首字母和尾字母當成是節點,如果該字母是乙個單詞的首字母,該字母的入度就加一,如果是尾字母,該字母的出度就加一。然後判斷是否形成尤拉迴路即可。尤拉路徑判斷條件 首先該圖必須是連通圖。對於無向圖,所有頂點的讀都為偶數,對於有向圖,要麼所有頂點的入度等於出...
POJ2337 尤拉迴路
題意 給你n個由小寫字母組成的單詞,要求將這n個單詞連線起來,使得前乙個單詞的最後乙個字母和後乙個單詞的第乙個字母相容,輸出字典序最小的解 思路 不難發現此題可以轉化為尤拉路徑問題,把每個字串的第乙個字母當作起點,最後乙個字母當作終點,連一條有向邊,求此圖字典序最小的尤拉路徑。對於有向圖來說,存在一...