洛谷OJ P1032 字串變換 解題報告

2022-09-04 13:15:15 字數 2222 閱讀 2863

by medalplus

【題目描述】

已知有兩個字串 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!"

【分析】

一開始拿到題目感覺有的懵懵噠,然後就明白了,這裡翻譯一下火星文:

給你兩個字串s1,s2,再給你許多許多變換方式使得s1=s2,求最少步數,大於10就輸出no answer

我想,這不就是搜尋求最優值問題麼?然後就自然地想到了迭代加深(這裡不贅述)

也就是最多層次為10,結果還是莫名其妙的tle了。。。

然後算了一下,對於變換方式,可能有許多許多,這也就意味著解空間樹不是乙個二叉樹,k叉樹!也就是nk的複雜度,很明顯tle麼。。

為什麼要用迭代加深呢?怕空間不夠!來算一下空間,20*20*19/2<107所以也就是虛驚一場,其實空間足夠大

但是普通的bfs絕對會tle的,這題有個特點,那就是知道起始點和終止點

然後我們採用雙向bfs,加快速度

然後就ac了

【**】

1 #include 2 #include 3 #include 

4 #include 5 #include 6 #include 7

using

namespace

std;89

const

int maxn=1001;10

11struct

node;

1516

intl;

17string c[maxn],c_[maxn];//

c=>c_

18string

s1,s2;

19 maphash_f,hash_b;

20 queuef,b;

2122

string getstr(string s,int l,int

r)28

29void

expand_f()

49if(hash_f[res])continue;50

else hash_f[res]=head.dfn+1

;51 f.push((struct node));

52 res=cc;53}

54}55}

5657

void

expand_b()

77if(hash_b[res])continue;78

else hash_b[res]=head.dfn+1

;79 b.push((struct node));

80 res=cc;//

clear81}

82}83}

8485

void

bfs());

90 b.push((struct node));

91while(1

)100

else

104}

105}

106107

intmain()

114 l--;

115bfs();

116 printf("

no answer!");

117return0;

118 }

洛谷1032 字串變換

已知有兩個字串 a b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1 可以變換為 b1 a2 可以變換為 b2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時,a 可以經過一系列的變換變為 b 其變換的過程為 ...

洛谷 P1032 字串變換

洛谷 p1032 字串變換 題目描述 已知有兩個字串 a,b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1 可以變換為 b1 a2 可以變換為 b2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時,a 可以經過...

洛谷 P1032 字串變換

已知有兩個字串 a,b 及一組字串變換的規則 至多 6 個規則 a1 b1 a2 b2 規則的含義為 在a 中的子串 a1 可以變換為 b1 a2可以變換為 b2 例如 a abcd bb xyz 變換規則為 abc xu ud y y yz 則此時,a 可以經過一系列的變換變為 b 其變換的過程為...