NOIp2000提高組 單詞接龍(dfs)

2021-09-02 02:42:02 字數 545 閱讀 3523

思路:首先要知道兩個單詞合併時,合併部分取的是最小重疊部分,相鄰的兩部分不能存在包含關係就是說如果存在包含關係,就不能標記為使用過,每個單詞最多出現兩次。搜尋的時候開個vis標記陣列,用來標記每個單詞使用的次數,從開頭字母開始搜尋,兩層for,第一層for搜尋每乙個單詞,第二層for是判斷我們搜尋的單詞的第幾位和列舉的單詞的首字母相同,比如搜尋的單詞是touch,當遍歷到cheat這個單詞時發現touch的第四位和列舉的單詞cheat相同時,我們用while迴圈找出重疊部分長度,那麼當前的長度就是 = 當前長度 + 列舉單詞長度 - 重疊部分的長度。回溯的時候vis標記減一,恢復長度就好了。注意初始化now為1,因為開頭是單個字母。

ac**:

#include using namespace std;

string s[25];

int vis[25], ans, now = 1, n;

void dfs(int k)}}

}int main()

NOIP2000提高組 單詞接龍

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...

NOIP 2000 提高組 複賽 單詞接龍

noip 2000 提高組 複賽 單詞接龍 1.程式編寫過程中,發現接龍處的判斷編寫有誤,馬上著手修改。2.樣例通過,提交40分,錯了測試點1 4.輸入 1envelopee 輸出 154.上述測試點是挺經典的,不容易考慮到。envelope envelope 拼接成envelopenvelope ...

NOIP 2023年提高組複賽 單詞接龍

說起這道題就心酸,幾個資料特別坑,幾分鐘寫完的程式花了乙個上午除錯bug,吐槽完畢,進入正題 1,需要建立乙個標記陣列vis表示當前單詞被採取的次數 2,for迴圈中找到每乙個符合條件的龍頭,初始化標記陣列後進行深度優先搜尋 3,因為連線起來的單詞要最長,所以對比是選擇從上乙個單詞的末尾與當前單詞的...