P1032 字串變換

2022-05-13 13:05:50 字數 1415 閱讀 4418

已知有兩個字串 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 ba1 b1 \

a2 b2 |-> 變換規則

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

輸出格式:

輸出至螢幕。格式如下:

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

輸入樣例#1:

abcd xyz

abc xu

ud y

y yz

輸出樣例#1:

3

以前做過這道題,

但是是打表才過的最後乙個點。

今天重做了一遍。

才悟到乙個真理:

永遠不要對stl產生過度依賴!

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8string

bg,ed;

9struct

guize

10gz[1001

];13

struct

node

14now,nxt;

18int num=1

;19 mapmp;

20int tot=0;21

void

bfs()

2235

if(p.step>10)36

40q.pop();

41 mp[p.zfc]=1;42

for(int i=1;i<=num-1;i++)

4359

if(p.zfc[j+k]!=gz[i].a[k])

6063

6465}66

if(flag==0)67

79}80}

81}82}

83}84}

85int

main()

86

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...

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,其變換的過程為 ...