八數碼問題的超簡單STL版

2021-09-21 02:05:50 字數 931 閱讀 1137

問題描述:

在3×3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是:給出一種初始布局(初始狀態)和目標布局123804765,找到一種最少步驟的移動方法,實現從初始布局到目標布局的轉變。

輸入一行,9個數,表示方陣的初始狀態

輸出一行,乙個整數,表示最少步數。若在5000步內無解,則輸出-1.

樣例輸入

123840765

樣例輸出1提示

解釋:樣例中123840765是3*3的方陣

1 2 3

8 4 0

7 6 5

目標方陣是:

1 2 3

8 0 4

7 6 5

從學習寬搜的那年開始,每年都要寫一次,這次寫了個超簡單版的,主要是c++裡的stl幫了大忙。詳細看下面**,我想,懂bfs框架的小白應該也能輕鬆駕馭它了吧。

#includeusing namespace std;

const int maxn = 362800+16;

string ends = "123804765";

struct node;

queueq;

mapmp;

int changeid[9][4] = ,,,

,,,,,

};//0出現在0->8的位置後該和哪些位置交換

void swaps(string &s,int pos ,int topos)

int bfs(string s,int pos0));

mp[s] = true;

while(!q.empty()));

mp[newcur] = true;}}

} } return -1;

}int main()

簡單的八數碼問題(BFS)

時間限制 1 sec 記憶體限制 256 mb 提交 9 解決 7 提交 狀態 討論版 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題目簡單,設目標狀態...

超簡單的數碼相框製作

本人個人網域名稱 所有文章首發位址 專案名稱 數碼相框 簡單 專案分類 嵌入式應用開發 pc機系統環境 ubuntu10.04 pc機qt版本 qmake version 2.01a using qt version 4.5.3 qt creator 1.2.0 based on qt 4.5.2 ...

八數碼問題簡單解決辦法

八數碼問題是乙個經典的bfs問題,把棋局看成乙個狀態圖,共有9!種狀態。從初始棋局開始,每次轉移到下個狀態,直到目標棋局為止。仔細分析可知,八數碼的關鍵是判重,如果不去除重複狀態,程式會產生很多無效狀態,從而複雜度大大增加 bfs cantor 0表示空格所在位置 初始棋局 1 2 3 0 8 4 ...