洛谷 P1379 八數碼難題 解題報告

2022-04-30 03:36:12 字數 1004 閱讀 5073

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

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

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

雖然這個題沒有用到,但還是提一下有解性判斷

當棋盤長度是奇數時,有解等價於初始狀態與目標狀態的抽出來橫著放的序列中逆序對個數的奇偶性相同

正常的解題思路:

用康托展開判重,用曼哈頓距離估價搜尋

然而我最開始打的記搜wa的不行

最後終於想明白,有環記蒐個錘子啊!!!

事實上狀態量很少,直接廣搜就可以

code:

#include #include const int n=1e6;

int s[10],fac[10],step[n],used[n],l,r;

int a[10]=;

void add(int x)

int ask(int x)

struct node

q[n];

int kanton(node x)

void swap(int &x,int &y)

int main()

if(used[id]) continue;used[id]=1;

for(int i=1;i<=9;i++) if(now.a[i]==1)

if(pos%3!=1)

if(pos%3)

if(pos>3)

if(pos<7)

}return 0;

}

2018.8.30

洛谷 P1379 八數碼難題

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

洛谷 P1379 八數碼難題

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

洛谷 P1379 八數碼難題

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