九度1482解題報告

2021-06-20 18:26:26 字數 808 閱讀 8546

看到這種題,第一反應就是bfs。可是一開始為剪枝的問題犯愁,最終使用map實現標記已判定的串,其實有點大材小用,只是用到了map.find()的功能,想到其用的是紅黑樹實現,找起來效率較高,當然別人也有用hash實現的,效率更高,我只是懶得改了。接著就開始為記錄樹深度犯愁,記得學資料結構的時候,層次遍歷是專門修改節點的資料結構來記錄樹深,但在這裡這樣做有些麻煩。看了九度鬼m的**,學會了每次出隊時,先記錄隊長度,然後一次性把原來隊裡的結點出完,這樣隊裡剩下的都是新拓展出來的下一層的結點。這個方法就方便多了,只需乙個while即可,也不用特殊的資料結構。**如下:

#include #include #include #include #include using namespace std;

map m;

int size;

queue q;

int count(string s, string c)

return ret;

}int bfs(string a, int n)

{ string tar("2012");

q.push(a);

int ret=0;

while (!q.empty())

{int qsize=q.size();

while (qsize--)

{a=q.front();

q.pop();

if (m.find(a)==m.end())

{m[a]=size++;

if (a.find(tar,0)!=string::npos) return ret;

for (int i=0;i

九度1184解題報告

這是乙個二叉樹的問題,題目如下 事實上考的就是二叉樹的資料結構以及先序和中序遍歷。一般來說,僅僅由先序遍歷序列無法得到中序序列,然而,本題特殊的地方在於先序遍歷序列中給出了遍歷中遇到的空指標,這樣就很容易根據序列構造二叉樹 依次訪問先序序列,遇到 就返回空指標,遇到非 字元就構造乙個對應的節點,然後...

九度1019解題報告

關於計算器的題目該題要編寫的計算器比一般的計算器簡單,因為不含括號,運算優先順序就兩種,先算乘除法就好,這是受到了fripside同學的啟發,不需要算術符號棧,只需要數字棧,遇加減號就將下乙個數字入棧 遇減號將數字反號入棧 遇乘除號,就將棧頂的數字取出運算後再入棧。當處理完整個計算式時,將棧中的所有...

九度1139解題報告

最小子矩陣問題是求最優解的一類題,看到題目就想到兩種做法,乙個是dp,乙個是搜尋遍歷的方法。雖然深搜很多時候並不是用來解決最優解問題的,但是dp的做法,我暫時沒有想到該怎麼做,於是就先用dfs,如下 include using namespace std define inf 999999999 i...