C 實現 藍橋杯 演算法提高 八數碼

2021-10-17 14:49:45 字數 1326 閱讀 5568

藍橋杯試題解答彙總鏈結

資源限制

時間限制: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輸出格式 對應多項式的...