普及練習場 深度優先搜尋 P1092 蟲食算

2021-10-02 23:26:58 字數 1569 閱讀 4589

題目描述

所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。

現在,我們對問題做兩個限制:

首先,我們只考慮加法的蟲食算。這裡的加法是n進製加法,算式中三個數都有n位,允許有前導的0。

其次,蟲子把所有的數都啃光了,我們只知道哪些數字是相同的,我們將相同的數字用相同的字母表示,不同的數字用不同的字母表示。如果這個算式是n進製的,我們就取英文本母表午的前n個大寫字母來表示這個算式中的0到n-1這n個不同的數字:但是這n個字母並不一定順序地代表0到n-1)。輸入資料保證n個字母分別至少出現一次。

上面的算式是乙個4進製的算式。很顯然,我們只要讓abcd分別代表0123,便可以讓這個式子成立了。你的任務是,對於給定的n進製加法算式,求出n個不同的字母分別代表的數字,使得該加法算式成立。輸入資料保證有且僅有一組解

輸入輸出格式

輸入格式:

包含四行。第一行有乙個正整數n(n<=26),後面的3行每行有乙個由大寫字母組成的字串,分別代表兩個加數以及和。這3個字串左右兩端都沒有空格,從高位到低位,並且恰好有n位。

輸出格式:

包含一行。在這一行中,應當包含唯一的那組解。解是這樣表示的:輸出n個數字,分別表示a,b,c……所代表的數字,相鄰的兩個數字用乙個空格隔開,不能有多餘的空格。

輸入輸出樣例

輸入樣例#1:

5abced

bdace

ebbaa

輸出樣例#1:

1 0 3 4 2

————————————————

思路:讀入資料

開始搜尋

第 ii 層搜尋第 ii 個字母的值(即 char(i+『a』-1))的值,採用乙個jud函式判斷合法性

當搜尋完所有字母並且全部合法後,直接輸出,退出程式

#include

#include

#include

#include

#include

#include

using

namespace std;

char a[30]

,b[30

],c[30]

;int t[

300]

,used[30]

,p[30

],u[30]

,y;int n;

boolok(

)}return1;

}void

try_1()

cout<'a']

;for

(int i=

'a'+

1;i<=

'a'+n-

1;i++

)cout<<

' '<;exit(0

);}void

dfs(

int now)

for(

int i=n-

1;i>=

0;i--)}

t[p[now]

+'a'-1

]=-1

;}intmain()

dfs(1)

;return0;

}

普及練習場 深度優先搜尋 P1605 迷宮

題目描述 給定乙個n m 1 n,m 5 方格的迷宮,迷宮裡有t處障礙,障礙處不可通過。給定起點座標和終點座標,問 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動乙個方格。資料保證起點上沒有障礙。輸入輸出格式 輸入格式 第一行n m和t,n為行...

普及練習場 深度優先搜尋 P1019 單詞接龍

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

普及練習場 廣度優先搜尋 P1141 01迷宮

題目描述 有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入輸出格式 輸入格式 輸入的第1行為兩個正整數n,m。...