C P1379 八數碼難題

2021-07-24 13:12:44 字數 860 閱讀 6002

題目:p1379 八數碼難題

經典演算法教材題目,然後我決定用 hash + bfs 搞一下,解釋**附上:

# include # include using namespace std;

string strat, end = "123804765", que[1000000]; //strat輸入和取佇列頭,end終點,que佇列

int move[5] = , from, to, lest[1000000];//move移動方向,from佇列頭,to佇列尾,lest存步數

bool vis[10000000]; // 字串對應hash值在vis裡是否有過

int hash(string s)

string swop(int i, int j, string s)

int main() // 特殊處理,輸入的串就是終點的時候

vis[hash(que[1] = strat)] = true; from = 1; to = 1; //strat入隊,對應vis設true,from佇列頭,to佇列尾

string kind; int sum, park; // kind 移動後的字串,sum放kind的hash值, park存'0'的下標

while(from <= to) { // 開始bfs

strat = que[from]; park = strat.find("0", 0); // 取佇列頭字串,找'0'的位置

for(int i = 1; i <= 4; i++) { // 列舉四個方向

int tx = park + move[i]; // tx 改變park下標後的下標,下面的檢查是否出界或是不法移動

if(tx<0||8

洛谷 1379 八數碼難題

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

Luogu1379 八數碼難題

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

P1379 八數碼難題

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