瑪雅人的密碼

2021-08-16 06:36:39 字數 803 閱讀 8883

瑪雅人有一種密碼,如果字串中出現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,(2=

輸入包含多組測試資料,每組測試資料由兩行組成。第一行為乙個整數n,代表字串的長度(2<=n<=13)。第二行為乙個僅由0、1、2組成的,長度為n的字串。

對於每組測試資料,若可以解出密碼,輸出最少的移位次數;否則輸出-1。

示例

輸入:5

02120

輸出:1

思路分析:該題主要使用的是廣度優先搜尋

(bfs),因為是找到最少的移動次數即可。若輸入為n位字串,則每次移動為n-1次。使用bfs時候需要使用到的資料結構為佇列

(queue)、對映

(map)、結構體

(struct),主要通過把首次輸入的字串push入隊,並每次從佇列中取出乙個結點進行判斷(一:該字串中是否含有2012,二、該字串是否已經判斷過),直到找到有2012的字串結點並輸出其移動次數,否則輸出-1(隊列為空)。

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

mapm;

struct node;

void movestring(queue&q,node n,int n)

return ;

}int main()elseelse

}} if(flag == 0)

} return 0;

}

瑪雅人的密碼

題目描述 瑪雅人有一種密碼,如果字串 現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 輸入描述 輸入包含多組測試資料,每組測試資料由兩行組成。第一行為乙個整數n,代表字串的長度 2 n 13 第二行為乙個僅由0 1 2組成的,長度為n的字串。輸出描述 對於每組測試資料,若可以解出密碼...

瑪雅人的密碼

瑪雅人有一種密碼,如果字串 現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 示例1 複製5 02120複製 1思路 自己用dfs寫的只過了60 看了看題解是用bfs 做的,真香 首先將字串 str 看做根節點,交換一次的字串作為第二層,以此類推,直到出現有 2012 的字串,那麼它的...

瑪雅人的密碼bfs

如何用佇列廣度優先遍歷所有可能性 queue 如何判別並標示某串是否訪問過 map 如何記錄某串已經交換字元的次數 子串2012是否存在 include include include include include include using namespace std int count 3 t...