P1379 八數碼難題

2022-08-13 01:45:32 字數 1145 閱讀 6164

沒什麼好說的,我一遍過的。

為什麼沒有什麼好說的呢?因為我做過。

曾經太菜不會cantor,只會用map暴力存,結果用了8000+ms。

我覺得比魔板容易。

**:

#include#includeconst int maxn = 370000;

const int t = ;

const int frac = ;

struct nodes

s[maxn];

int start[10], start_cantor;

int end[10], end_cantor;

int queue[maxn], front, rear;

int cantor(int* x)

ans += s * frac[9 - i];

}return ans;

}nodes a(nodes x)

if(pos >= 4) std::swap(ans.a[pos], ans.a[pos - 3]);

else ans.a[1] = 250;

return ans;

}nodes b(nodes x)

if(pos <= 6) std::swap(ans.a[pos], ans.a[pos + 3]);

else ans.a[1] = 250;

return ans;

}nodes c(nodes x)

if(pos % 3 != 1) std::swap(ans.a[pos], ans.a[pos - 1]);

else ans.a[1] = 250;

return ans;

}nodes d(nodes x)

if(pos % 3 != 0) std::swap(ans.a[pos], ans.a[pos + 1]);

else ans.a[1] = 250;

return ans;

}int bfs()}}

}int main()

start_cantor = cantor(start);

end_cantor = cantor(end);

printf("%d\n", bfs());

return 0;

}

P1379 八數碼難題

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

P1379 八數碼難題

雙向bfs 右手進入傳送門 有乙個3 3的棋盤,其中有8個編號為1 8的棋子和乙個空格,空格四周的棋子可以向空格移動,給出棋盤的初始狀態,問至少移動多少部可以達成目標狀態。注意 棋盤的狀態用乙個九位數表示。顯然是一道搜尋題,而且狀態比較好表示 乙個九位數 搜尋的量也不大,所以可以用bfs。這種移動棋...

P1379 八數碼難題

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