在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法?
主要運用回溯法有遞迴及迭代兩種**形式:
遞迴的**:
#include #include const int n=20; //最多放皇后的個數
int q[n]; //i表示皇后所在的行號,
//q[i]表示皇后所在的列號
int cont = 0; //統計解的個數
//輸出乙個解
void print(int n)
printf("\n");
}}//檢驗第i行的k列上是否可以擺放皇后
int find(int i,int k)}}
}int main(void)
system("pause");
return 0;
}
迭代的**
#include #include #include #define queen 8 //皇后的數目
#define initial -10000 //棋盤的初始值
int a[queen]; //一維陣列表示棋盤
void init() //對棋盤進行初始化
}int valid(int row, int col) //判斷第row行第col列是否可以放置皇后
return 1;
}void print() //列印輸出n皇后的一組解
printf("\n");
}for (i = 0; i < queen; ++i)
printf("%d ", a[i]);
printf("\n");
printf("--------------------------------\n");
}void queen() //n皇后程式
else
}if(a[i] == initial) //第i行沒有找到可以放置皇后的位置
}if (i == queen - 1) //最後一行找到了乙個皇后位置,
//說明找到乙個結果,列印出來
++i; //繼續探測下一行的皇后位置
}}int main(void)
注意:a[i]=j;代表第i行第j列放皇后 N皇后問題
include define maxqueens 20 define minqueens 4 enum bool typedef struct queendata queendata queendata queens maxqueens 1 int ncount init int init chec...
N皇后問題
採用遞迴回溯法 執行結果 輸入8 對於n皇后解的個數,參考 當n 16時,構造法給出解,參考poj 3239 一 當n mod 6 2 且 n mod 6 3時,有乙個解為 2,4,6,8,n,1,3,5,7,n 1 n為偶數 2,4,6,8,n 1,1,3,5,7,n n為奇數 上面序列第i個數為...
N皇后問題
問題 題目 於西洋棋的玩法,因為皇后所在的位置可以縱向 橫向 兩個斜向四個方向的 捕捉 所以8皇后問題就是要求如何布置8個皇后在8 8的棋盤上而使他們互相無法 捕捉 也就是說不存在兩個皇后同行或同列,或在同一斜線上。而n皇后問題就是如何布置n個皇后在n n棋盤裡使不存在兩個皇后在同行同列和同一斜線上...