codevs 1225 八數碼難題 題解

2021-06-26 06:53:53 字數 1423 閱讀 4246

yours和zero在研究a*啟發式演算法.拿到一道經典的a*問題,但是他們不會做,請你幫他們.

問題描述

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

輸入描述 input description

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

輸出描述 output description

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

樣例輸入 sample input

283104765

樣例輸出 sample output

4 最近寫了一下八數碼,看到網上各種nb大神的nb方法,由於本人搜尋很弱,所以準備學習一下。

++++++++++++++++++++++++以下是裸bfs++++++++++++++++++++++++++++

#include #include #include #include #include #include #include #include using namespace std;

const string aim="123804765";

vectorv;

int b[4000000];

sets;

string now;

queueq; int ans;

int zerox,zeroy,a[4][4];

void print()

swap(a[zerox][zeroy],a[zerox][zeroy-1]);

} return ;

}void xia()

swap(a[zerox][zeroy],a[zerox][zeroy+1]);

} return ;

}void zuo()

swap(a[zerox][zeroy],a[zerox-1][zeroy]);

} return ;

}void you()

swap(a[zerox][zeroy],a[zerox+1][zeroy]);

} return ;

}void change(string ss)

}return ;

}int bfs(string ss)

change(ss);

shang();

xia();

zuo();

you(); }

}

int main()

} s.insert(now);

cout<

CodeVs 1225 八數碼難題

yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題...

codevs1225 八數碼難題

題目描述 description yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布...

codevs1225八數碼難題(搜尋 )

時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題解yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的...