八數碼 廣搜)

2021-08-28 15:19:58 字數 1026 閱讀 6916

時限:5000ms 記憶體限制:20000k  總時限:10000ms

描述在九宮格裡放在1到8共8個數字還有乙個是空格,與空格相鄰的數字可以移動到空格的位置,問給定的狀態最少需要幾步能到達目標狀態(用0表示空格):

1 2 3

4 5 6

7 8 0

輸入輸入乙個給定的狀態。

輸出輸出到達目標狀態的最小步數。不能到達時輸出-1。

輸入樣例

1 2 3

4 0 6

7 5 8

輸出樣例

**:#include

#include

#include

#include

#include

using namespace std;

mapshape;

int a[3][3];

int b[3][3];

int dir[4][2]=,,,};

queueq;

int canmoveto(int x,int k)

x=x/10;

}if(flag==1)break;

}tx=i+dir[k][0];

ty=j+dir[k][1];

if(tx>=3||ty>=3||tx<0||ty<0)

else return 1;

}int moveto(int x,int k)

}x=x/10;}}

tx=row+dir[k][0];

ty=col+dir[k][1];

b[row][col]=b[tx][ty];

b[tx][ty]=0;

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

for(int j=0;j<3;j++)

return sum2;

}int bfs()}}

}}return -1;

}int main()

q.push(sum1);

shape[sum1]=0;

cout

}

雙向廣搜 八數碼

雙向廣搜還是乙個很神奇的東西 判重更神奇 雙廣僅適用於有目標狀態的題目 include include include include include include include include include include using namespace std const int maxx...

八數碼 單向廣搜

八數碼 poj1077 八數碼問題是人工智慧中的經典問題 有乙個3 3的棋盤,其中有0 8共9個數字,0表示空格,其他的數字可以和0交換位置。求由初始狀態 到達目標狀態 1 2 3 4 5 6 7 8 0 的步數最少的解 給定排列求序號 整數 1,2 k的乙個排列 a1 a2 a3 ak 求其序號 ...

八數碼問題(廣搜)

題目 描述 在九宮格裡放在1到8共8個數字還有乙個是空格,與空格相鄰的數字可以移動到空格的位置,問給定的狀態最少需要幾步能到達目標狀態 用0表示空格 1 2 3 4 5 6 7 8 0 輸入 輸入乙個給定的狀態。輸出 輸出到達目標狀態的最小步數。不能到達時輸出 1。輸入樣例 1 2 3 4 0 6 ...