n皇后問題

2021-09-11 05:04:51 字數 1221 閱讀 1864

在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棋盤裡使不存在兩個皇后在同行同列和同一斜線上...