瑪雅人有一種密碼,如果字串**現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,(2=輸入包含多組測試資料,每組測試資料由兩行組成。
第一行為乙個整數n,代表字串的長度(2<=n<=13)。
第二行為乙個僅由0、1、2組成的,長度為n的字串。
對於每組測試資料,若可以解出密碼,輸出最少的移位次數;否則輸出-1。
示例1輸入
5
02120
輸出
1
1、這是一道經典bfs問題,首先判斷該字串有沒有「2012」,如果有則返回,沒有則迴圈n-1次,每次移動第i位,加入佇列,接下去再在這個基礎上繼續移動一位,直至找到解。
2、如何判斷該字串已經被訪問過? 可以使用mapmp;每次得到乙個新的字串加入map,賦值為1,(初值預設為0),只需要判斷mp中字串對應的int型別即可。
3、創立乙個查詢函式
查詢函式
bool
find
(string str)
return
false
;}
定義乙個結構體,記錄字串以及移動字元的次數
struct node
};
bfs**
int
bfs(string str)
}return-1
;}
主函式
#include
#include
#include
#include
#include
using
namespace std;
intmain()
return0;
}
瑪雅人的密碼bfs
如何用佇列廣度優先遍歷所有可能性 queue 如何判別並標示某串是否訪問過 map 如何記錄某串已經交換字元的次數 子串2012是否存在 include include include include include include using namespace std int count 3 t...
BFS 瑪雅人的密碼
時間限制 1秒 空間限制 65536k 熱度指數 5412 瑪雅人有一種密碼,如果字串 現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 示例1 1.典型的bfs題目,節點為字串 2.巧妙地運用map來判斷搜尋樹中是否有重複的節點 3.s.find 2012 string npos 匹...
瑪雅人的密碼(利用bfs)
瑪雅人有一種密碼,如果字串中出現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 示例1 複製5 02120 複製1 解析 利用bfs的思想進行 如下 方法一 bfs 純c,無利用queue函式 include include include includechar pass 2012 ...