時限: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 ...雙向廣搜 八數碼
八數碼 單向廣搜
八數碼問題(廣搜)