題目鏈結為:
思路:
看到資料比較小,而且最多有6個規則,就可以用搜尋去做了,我用的bfs,大體思路如下:
定義結構體表示狀態,其中包括字串str和當前步數num;並定義該結構體的佇列;
用map實現string到int的對映,用來記錄某個狀態是否到達過,若到達過,標記為1,否則為0;
bfs函式中就是bfs的經典模組,有個難點是從當前狀態蒐時,不僅要考慮遍歷每乙個規則的情況,而且要注意在某一規則中母串中可能有多個字串可以被替換,必須都考慮到,否則會被第5個資料卡。
下面是ac**:
1 #include2 #include3 #include4 #include5 #include6
using
namespace
std;78
struct
nodenod;
1213 queueq;
14 mapm;
15string
a,b;
16string aa[6],bb[6
];17
int n=0;18
19void
bfs()
29if(ns==b)
33for(int i=0;i)
44 index=ns.find(aa[i],index+aa[i].length());45}
46}47}
48 printf("
no answer!\n");
49}5051
intmain()
luogu 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,其變換的過程為 ...
bfs P1032 字元變換
剛開始我覺得應該使用dfs來做吧.因為可替換的子串有多種選擇,一種換下來不行 超過10步 就捨棄。但仔細想想,因為要比較得到最小的步數,所以豈不是每種可能性都會去試10步?複雜度太高了!謹記 一般的,求解的個數用深搜,求最優解用廣搜。為什麼呢?因為對於bfs,它有個step 不管你是寫陣列還是寫在結...
洛谷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 其變換的過程為 ...