洛谷P1032 字串變換 bfs

2022-06-26 03:21:17 字數 1269 閱讀 4117

題意:

給定乙個原字串和目標字串,以及幾個字串變換的規則。

問能否根據這幾個規則在十步之內把原字串變為目標字串。

思路:

bfs,佇列維護字串和所經過的步驟這樣乙個二元組而不是簡單的字串。

每一次取出乙個字串,用所給的規則進行變換得到新的字串。

由於字串中可能有多次匹配,所以用vector存每一次匹配的開始位置,這些都是獨立的一次變換都要單獨存入vector中。【這一點最開始沒有考慮到,圖方便用了.find()】

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include8 #include9 #include10

11using

namespace

std;

1213

string

a, b;

14struct

rulerules[7

];17

struct

node

21 node(string _s, int

_steps)

25};

26set

sset;

2728

intmain()

2946

if(now.steps == 10)continue;47

for(int i = 0; i < n; i++)

60if(now.s[j + k] !=rules[i].a[k])64}

65if

(f)pos.push_back(j);66}

6768

//cout<69

for(int x = 0; x < pos.size(); x++)

77for(int k = 0; k < rules[i].b.length(); k++, j++)

7881

for(int k = p + rules[i].a.length(); k < now.s.length(); k++, j++)

84 t[j] = '\0'

;8586if(sset.find(t) ==sset.end())90}

91}92}

93if

(flag)

96else

99return0;

100 }

---恢復內容結束---

洛谷p1032 字串變換 (bfs)

題目概述 字串的子串 必須連續與子串行不同 有至多六種變化規則,若在10步 包含10步 以內能將a變換為b,則輸出最少的變換步數 否則輸出 no answer 題目分析 ac include using namespace std mapint mp 從前出現過的字串不能再次出現 廣度搜尋樹,第一次...

BFS 洛谷 P1032 字串變換

年輕人切忌旋入技術細節漩渦,那是無底之洞 zeo 基礎bfs加一堆字串處理細節 逐個比較是否可替換 替換時把字元拆成三段 前 要替換的 後 根據string 特性 前 替換的 後 可得操作完畢後串 步數壓入佇列繼續bfs map 進行判重 坑的不行 寫的想吐 沒感到任何技術提公升 include i...

洛谷 P1032 字串變換(BFS,字串)

這題要注意的點 keng 挺多的 題目描述 已知有兩個字串a,b及一組字串變換的規則 至多6個規則 a 1 b 1 a 2 b 2 規則的含義為 在 a中的子串 a 1可以變換為 b 1,a 2 可以變換為 b 2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時...