洛谷 1379 八數碼難題

2022-04-29 20:12:12 字數 1132 閱讀 4683

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

輸入格式:

輸入初始狀態,一行九個數字,空格用0表示

輸出格式:

只有一行,該行只有乙個數字,表示從初始狀態到目標狀態需要的最少移動次數(測試資料中無特殊無法到達目標狀態資料)

輸入樣例1:

283104765

輸出樣例1:

4

solution

首先每次挪動棋子,最多把乙個棋子歸位,所以當有n個棋子沒有歸位時,最少的步數是n,

//

luogu-judger-enable-o2

#includeusing

namespace

std;

const

int dx[5]=;

const

int dy[5]=;

const

int p[10]=;

int s,flag,r[10],a[5][5],_map[5][5],dis[10][10

];bool

check()

intget

()//a*剪枝

int jue(int a,int

b)int calx(int

i)int caly(int

i)void dfs(int depth,int x,int

y)//裸的暴搜

for(int i=0;i<4;i++)

}void

pre()

intmain()

for(s=0;;s++)

}return0;

}

洛谷 1379 八數碼難題

題目 八數碼難題 思路 bfs hash判重。注意 1 hash的鍊錶不能寫錯。2 由於用的是一位陣列,所以移動時要判斷左右邊界。比如當前的空位在5處,就不能向右移 1。0 1 2 3 4 5 6 7 8 include include include include include include...

洛谷 P1379 八數碼難題

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

洛谷 P1379 八數碼難題

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