藍橋杯試題解答彙總鏈結
資源限制
時間限制:1.0s 記憶體限制:256.0mb
問題描述
rxy八數碼,給出初始狀態和目標狀態,通過移動數字0(可上、下、左、右方向移動一格)使初始狀態變為目標狀態,求最少移動多少步?
輸入格式
輸入兩個3*3**
第乙個為目標**
第二個為檢索**
輸出格式
輸出最少移動步數
樣例輸入
1 2 3
4 5 6
7 8 0
1 2 3
4 5 6
7 0 8
樣例輸出1
資料規模與約定3*3*2
試題解析
該題為最短路的問題所以採用廣度優先搜尋(bfs)更好一些
思路:移動數字0,使達到目標狀態,0每次有四種選擇,但因為要使用bfs需要儲存每一步後的狀態,若用二維陣列顯然不太合適,所以我們把3×3的網格轉化成長為9的字串,這樣在佇列中儲存更加方便,起初記錄初始狀態和目標狀態,其中**部分的雜湊表d表示到達某狀態需要移動多少次開始搜尋,取出隊頭若當前狀態為目標狀態之間返回步數,記錄當前所需步數,及找到0的下標並將其轉化成網格中的座標遍歷其可移動的四個方向,移動到新的位置等價於交換兩個字元的位置,若當前狀態沒有出現過則記錄入隊,然後回溯
**
注:以下**為c++11版本之後支援的寫法,藍橋杯的評測機目前是c++98
需要把**中的unordered_map改為map,把auto改為string
#include
#include
#include
#include
using
namespace std;
int dx=
, dy=
;boolin(
int x,
int y)
intbfs
(string start, string end)
swap
(t[k]
, t[nx *
3+ ny]);
}}return-1
;}intmain()
printf
("%d"
,bfs
(start, end));
return0;
}
藍橋杯 演算法提高 8皇后 c 實現
演算法提高 8皇后 改 時間限制 1.0s 記憶體限制 256.0mb 問題描述 規則同8皇后問題,但是棋盤上每格都有乙個數字,要求八皇后所在格仔數字之和最大。輸入格式 乙個8 8的棋盤。輸出格式 所能得到的最大數字和 樣例輸入 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...
藍橋杯 BFS 八數碼問題(演算法筆記8)
題目中輸入初始狀態和目標狀態,返回最少的移動步數。這與迷宮問題的最短路勁有些許相似,但這裡更多的是一種狀態的思考,本題涉及到 康托展開 這個特殊的雜湊函式。但是,思路有了不代表能做對,因為ac還要考慮時間複雜度,空間複雜度問題,不過一般空間複雜度都沒太大的問題。那麼為什麼這裡說不能做對?這裡參考書上...
藍橋杯 演算法提高 遞迴 C語言
試題 演算法提高 遞迴 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 當x 1時,hermite多項式的定義見第二版教材125頁。使用者輸入x和n,試編寫 遞迴 函式,輸出對應的hermite多項式的值。其中x為float型,n為int型。輸入格式 x n輸出格式 對應多項式的...