P1032 字串變換 字串

2022-05-11 01:53:32 字數 1441 閱讀 6351

已知有兩個字串 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
出這道題的人真的是喪心病狂,這題沒什麼思維難度,但是很考**能力。

我看到有人stl一下就過了,但是我做的可能比較麻煩,廣搜加字串hash。

**:

#include#include#include#include#include#define ll long long

#define il inline

#define db double

using namespace std;

il int gi()

while(ch>='0'&&ch<='9')

return x*y;

}int len1,len2;

int now=1;

char begin[45],aim[45];

char chan[45][2][45];

int lon[45][2];

char t[100045][45];

char tmp[45];

char ne[45];

int lenth;

int len[100045];

int bu[100045];

int head,tail=1;

bool vis[100000045];

int p=31,t=100000007;

bool flag=0;

il void bfs()}}

}}int main()

bfs();

if(flag==0)

printf("no answer!\n");

return 0;

}

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