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