n後問題 nQueen(分支限界法,BFS)

2021-09-07 18:33:06 字數 1031 閱讀 7149

邏輯注釋在**中

完整**:

#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開始,...