試煉場 廣度優先搜尋 P1032 字串變換

2021-10-02 20:58:17 字數 1269 閱讀 1217

p1032 字串變換

題目描述

已知有兩個字串 a, b 及一組字串變換的規則(至多6個規則):

a1 -> b1

a2 -> b2

規則的含義為:在 a$中的子串 a1 可以變換為 b1、a2 可以變換為 b2 …。

例如:a=』abcd』b=』xyz』

變換規則為:

『abc』->『xu』『ud』->『y』『y』->『yz』

則此時,a 可以經過一系列的變換變為 b,其變換的過程為:

『abcd』->『xud』->『xy』->『xyz』

共進行了三次變換,使得 a 變換為b。

輸入輸出格式

輸入格式:

輸入格式如下:

a b a1 b1 \

a2 b2 |-> 變換規則

所有字串長度的上限為 20。

輸出格式:

輸出至螢幕。格式如下:

若在 10 步(包含 10步)以內能將 a 變換為 b ,則輸出最少的變換步數;否則輸出"no answer!"

輸入輸出樣例

輸入樣例#1:

abcd xyz

abc xu

ud y

y yz

輸出樣例#1:

3————————————————

#include

#include

#include

#include

#include

#include

using

namespace std;

map < string,

int> mp;

intmain()

n--; queue q;

queue<

int> s;

q.push

(a);

s.push(0

);while

(!q.

empty()

)if(s.front()

==10

) string t = q.

front()

;if(mp.

count

(t))

mp[t]=1

;for

(int i=

1;i<=n;i++)}

q.pop()

; s.

pop();

}cout<<

"no answer!"

;return0;

}

落谷試煉場 P1032 字串變換

思路 使用bfs,遍歷所有替換的情況,值得注意的一點是,對同乙個字串可能在不同位置都能替換,一開始沒有考慮到這一點 c include include include include using namespace std const int maxn 12 string fa maxn fb ma...

P1032 字串變換

思路 採用bfs 我們遍歷字串a的每個字元,判斷當前字串i位置之後可不可以替換,如果可以替換,我們就把替換後的字串 a 放入佇列。如果出現的我們想要的字串,根據bfs的性質,那麼就直接記錄此時的步數。1 include 2 include 3 include 4 include 5 include ...

P1032 字串變換

迭代加深難題 右手進入傳送門 大意是這樣的 給定兩個字串a,b以及至多六個變換規則 規則指a1 b1,a2 b2,在a中的子串 a1可以變換為b1,a2可以變換為 b2 求最少變換步數,若在10步 包含10步 以內能將a變換為b,則輸出最少的變換步數 否則輸出 no answer 看到題目要求的10...