資料結構
設queue——佇列,儲存從(1,1)可達的點(queue[k][1…2])以及到達該點所需要的最少步數(queue[k][3])(0≤k≤192+1)。佇列的首指標為head,尾指標為tail。初始時,queue中只有乙個元素為(1,1),最少步數為0。
s —記錄(1,1)到每點所需要的最少步數。顯然,問題的答案是s[x1][y1]和s[x2][y2]。初始時,s[1][1]為0,除此之外的所有元素值設為-1。
約束條件
⑴不能越出界外。
⑵該點在以前的擴充套件中沒有到達過。
由此得出,馬的跳後位置(x,y)是否可以入隊的約束條件是s[x][y]<0。
#include #include #include using namespace std;
int dx[12]=, dy[12]=;
int main(),x1,y1,x2,y2;
memset(s,0xff,sizeof(s)); //s陣列的初始化
int head=1,tail=1; //初始位置入隊
que[1][1]=1;que[1][2]=1;que[1][3]=0;
cin>>x1>>y1>>x2>>y2; //讀入黑馬和白馬的出發位置
while(head<=tail) }}
head++;
}}
分支限界法 最少步數走出迷宮
問題描述 使用者從螢幕輸入m,n表示乙個m n的迷宮,0表示空地,1表示牆,給定起點的行,列 給定終點的行,列 輸出最少到達目標的步數 示例輸入 4 4 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 2 2 樣例輸出 5問題分析 1.根據分支限界法基本思想 詳見上篇分支限界...
最少步數 迷宮問題型別)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1...
演算法筆記 分支限界演算法 裝載問題
其實類似與樹的層次遍歷演算法 一層一層遍歷需按照最優演算法 給定揹包最大容量 物品的重量 求最大裝載量 這個題中的樹和回溯演算法一樣 左子樹選擇這個結點 右子樹不選擇這個結點 include include include include include include define num 100...