回溯算法(八皇後問題)
阿新 • • 發佈:2018-09-04
names .cn htm 回溯法 href total else std https
八皇後問題
在國際象棋中,皇後是最強大的一枚棋子,可以吃掉與其在同一行、列和斜線的敵方棋子。
將八個皇後擺在一張8*8的國際象棋棋盤上,使每個皇後都無法吃掉別的皇後,一共有多少種擺法?
程序實現
程序摘自回溯法與八皇後問題
#include<iostream> #include<math.h> using namespace std; int n=8; int total=0; int *c=new int(n); //下標為行數,存的數為列數 bool is_ok(int row){ for(int j=0;j!=row;j++){ if(c[row]==c[j] || //檢測是否在同一列 row-c[row]==j-c[j] || //檢測是否在同一”\“斜線上 row+c[row]==j+c[j]) //檢測是否在同一"/"斜線上 return false; } return true; } void queen(int row){ if(row==n) total++; else for(int col=0;col!=n;col++){ c[row]=col; if(is_ok(row)) queen(row+1); } } int main(){ queen(0); cout<<total; return 1; }
回溯算法(八皇後問題)