BFS入門 八數碼問題

2021-09-21 01:44:30 字數 1277 閱讀 7834

題目描述

初始狀態的步數就算1,哈哈

輸入:第乙個33的矩陣是原始狀態,第二個33的矩陣是目標狀態。

輸出:移動所用最少的步數

input

2 8 3

1 6 4

7 0 5

1 2 3

8 0 4

7 6 5

output

思路:這道題bfs搜尋的每一步就是讓矩陣從乙個狀態變為另乙個狀態。所以我們用乙個結構體來儲存狀態(當前位置的橫座標,當前位置的縱座標,從初始狀態矩陣到當前狀態矩陣所變換的次數,上乙個狀態』0』的位置)。

#include

#include

#include

using

namespace std;

int matrix[3]

[3];

int final_matrix[3]

[3];

struct node

state;

int dir[4]

[2]=

,,,}

;bool

judge

(int x,

int y)

return

true;}

bool

same

(int matrix[3]

[3])

}}return

true;}

intbfs

(int x,

int y)

} queue q;

q.push

(state)

;while

(!q.

empty()

)}swap

(state.m[nx]

[ny]

, state.m[top.x]

[top.y]);

if(same

(state.m)

) q.

push

(state);}

}}return-1

;}intmain()

}}for(

int i =

0; i <

3; i++)}

cout <<

bfs(sx, sy)

<< endl;

return0;

}

雙向BFS 八數碼問題

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

八數碼問題 雙向bfs

如 注釋的很清楚了 單向的還可以看看這個 以下是參考上面連線的雙向 include include include include include using namespace std int dr 2 queue int q1,q2 map int,int c1 記錄是否走過這個狀態,避免重複,...

簡單的八數碼問題(BFS)

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