luogu P1032 字串變換

2022-04-30 01:51:06 字數 1760 閱讀 2571

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

#include

using

namespace

std;

struct

node;

node st, topp;

int n = 1, js, len_from[21

];string

s1, s2, now_st, nxt;

string

from[10], to[10

];queue

q;map

mp;inline

bool pd_out(string

s)inline

void pd_answer(string s, int

answer)

}inline

void

bfs()}}

}}int

main()

n --;

bfs();

printf(

"no answer!");

return0;

}/*abaaaba abcdaba

a bb d

d ee f

f gg c

*/

有乙個函式substr

#include #include 

#include

#include

#include

#include

using

namespace

std;

string

a, b;

struct

nodes[

20];

int ind=1

;struct

po};

queue

que;

setss;

intmain()

for(int i=1;i<=ind;i++)}}

}}

printf(

"no answer!");

return 0;

}

LuoguP1032 字元變換(BFS)

題目鏈結為 思路 看到資料比較小,而且最多有6個規則,就可以用搜尋去做了,我用的bfs,大體思路如下 定義結構體表示狀態,其中包括字串str和當前步數num 並定義該結構體的佇列 用map實現string到int的對映,用來記錄某個狀態是否到達過,若到達過,標記為1,否則為0 bfs函式中就是bfs...

洛谷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 字串變換

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