一道難得的搜尋好題,題目大意很簡單,這裡不再贅述,主要說一下思路
當然普通的bfs答案是正確的,但是在ch上評測會tle乙個點,所以我們採用效率更高的雙向bfs
從初始狀態和目標狀態分別搜尋,建立兩個佇列,分別擴充套件狀態。如果乙個佇列擴充套件的狀態已經被另乙個佇列搜尋過了,那麼便出現答案了。
另外,使用map可以對字串進行標記,replace可以自動替換字串,詳見**。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #includeac code8using
namespace
std;
9string a,b,aa[10],bb[10
];10
int n=1
;11 queueq1;
12 queueq2;
13 mapvis;
14 mapdis;
15string
now,noww,neww;
16int
main()
29while((!q1.empty())&&(!q2.empty()))
47 vis[neww]=1
;48 dis[neww]=d+1;49
q1.push(neww);50}
51 noww[m]='!'
;52}53
}54}55
else
72 vis[neww]=2
;73 dis[neww]=d+1;74
q2.push(neww);75}
76 noww[m]='!'
;77}78
}79}80
}81 puts("
no answer!");
82return0;
83 }
NOIP2002 字串變換 題解
字串變換 字串的題以後還是用string吧,很多函式賊有用。思路 雙向bfs,判斷中途相遇,兩個map即可。關鍵是處理字串的替換,找子串可以用string的find 函式,替換可以用string 的 replace 函式.include include include include include...
NOIP 2002 提高組 字串變換
題目描述 已知有兩個字串 a,b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1 可以變換為 b1 a2 可以變換為 b2 例如 a abcd b xyz 變換規則為 abc xu ud y y yz 則此時,a 可以經過一系列的變換變為 b,其變換...
noip2002 字串變換 (雙向寬搜,交替擴充套件)
p1124字串變換 accepted 標籤 搜尋 搜尋與剪枝 noip提高組2002 已知有兩個字串 a b 及一組字串變換的規則 至多6個規則 a1 b1 a2 b2 規則的含義為 在 a 中的子串 a1 可以變換為 b1 a2 可以變換為 b2 例如 a abcd b xyz 變換規則為 abc...