c 八數碼問題(廣搜)

2021-08-10 14:31:45 字數 1170 閱讀 4494

時限: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

輸出樣例2

#include

#include

#include

using namespace std;

queueq1;

mapstep;

int istate;

int dr[4]=;//0,1,2,3分別表示左,下,右,上 

int dc[4]=;//0,1,2,3分別表示左,下,右,上 

int bfs();

void readdate();

void init();

int canmoveto(int u,int dire);

int moveto(int u ,int dire);

int main()

int bfs()

if(step.count(v)==0)//如果v是乙個新狀態  } 

}}return -1;

}void readdate()

}istate=num;

}void init()//1.起點加入佇列 2.標註起點是已到達過的節點3.記錄到達起點的最小步數為零 

int canmoveto(int u,int dire)}}

r=brow+dr[dire];

c=bcol+dc[dire]; 

if(r<=2&&r>=0&&c<=2&&c>=0)

return 0;

}int moveto(int u,int dire)}}

r=brow+dr[dire];

c=bcol+dc[dire]; 

sa[brow][bcol]=sa[r][c];

sa[r][c]=0;

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

}return sum;

}

八數碼問題(廣搜)

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

八數碼 廣搜)

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

雙向廣搜 八數碼

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