邏輯注釋在**中
完整**:
#include#includeusing namespace std;
// 用來判斷棋盤上的點(row, column) 是否安全
bool canput (int row, int column, int *answer);
int main()
// 每一層都有乙個佇列儲存可生成結點
queuequeue[queens];
// 棋盤 ,改用answer儲存
// int chessboard[queens][queens] = ;
// answer作為輔助陣列,下標表示層級,值表示column ,也就是棋盤
int answer[queens] = ;
// 第一層肯定全為活結點
for (int i = 0; i < queens; i++)
while (1)
// 找不到解(邊界問題)
if (current == -1)
// 取當前層級佇列頭為活結點並彈出佇列
activated = queue[current].front();
queue[current].pop();
// 假設這就是答案,放置在棋盤裡(存到answer中 )
answer[current] = activated;
// current++找下一層可以安全放置的點加入佇列
current++;
for (int i = 0; i < queens; i++)
}// 如果當前層級是最後一層而且層級有結點,即已經找到解
if (current == queens - 1 && !queue[current].empty())
break;
} }return 0;
}bool canput (int row, int column, int *answer)
} return true;
}
佈線問題 分支限界法
佈線問題就是在 m n 的方格陣列中,指定乙個起點 a 乙個終點 b,要求找到起點到終點的最短佈線方案 最短路徑 搜尋從起點 a 開始,到目標點 b 結束。約束條件 有邊相連且未成佈線。搜過過程 從起點 a 開始,將其作為乙個擴充套件結點,沿 a 的上 下 左 右 4 個方向的相鄰結點擴充套件。判斷...
佈線問題 分支限界法
問題描述 印刷電路板不限區域劃分成n m個方格陣列。如下圖所示 精確的電路佈線問題要求確定連線方格a的中點,到連線方格b的中點的最短佈線方案。佈線時,電路只能沿直線或直角佈線。為了避免線路相交,已佈的線的方格做了封鎖標記,其他線路不允許穿過被封鎖的方格。分支限界法的解決方案 首先,從起始位置a開始,...
佈線問題 分支限界法
問題描述 印刷電路板不限區域劃分成n m個方格陣列。如下圖所示 精確的電路佈線問題要求確定連線方格a的中點,到連線方格b的中點的最短佈線方案。佈線時,電路只能沿直線或直角佈線。為了避免線路相交,已佈的線的方格做了封鎖標記,其他線路不允許穿過被封鎖的方格。分支限界法的解決方案 首先,從起始位置a開始,...