LuoguP1032 字元變換(BFS)

2022-08-21 20:15:13 字數 818 閱讀 4871

題目鏈結為:

思路:

看到資料比較小,而且最多有6個規則,就可以用搜尋去做了,我用的bfs,大體思路如下:

定義結構體表示狀態,其中包括字串str和當前步數num;並定義該結構體的佇列;

用map實現string到int的對映,用來記錄某個狀態是否到達過,若到達過,標記為1,否則為0;

bfs函式中就是bfs的經典模組,有個難點是從當前狀態蒐時,不僅要考慮遍歷每乙個規則的情況,而且要注意在某一規則中母串中可能有多個字串可以被替換,必須都考慮到,否則會被第5個資料卡。

下面是ac**:

1 #include2 #include

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