(原創,未經允許不得轉載) 經典的八皇後問題 題目: 八皇後問題就是在8*8的棋盤上放置8個皇後,使其任意兩個不在同一行、同一列、同一斜線上。 解題思路: 去掉行這個因素,然後去考慮是否在同一列或同一斜線上。每個擺放成功的棋子在(i,x[i]),然後設置當前行,然後在該行從第一列一直試探到第8列,看 ...
(原創,未經允許不得轉載) 經典的八皇後問題
題目:
八皇後問題就是在8*8的棋盤上放置8個皇後,使其任意兩個不在同一行、同一列、同一斜線上。
解題思路:
去掉行這個因素,然後去考慮是否在同一列或同一斜線上。每個擺放成功的棋子在(i,x[i]),然後設置當前行,然後在該行從第一列一直試探到第8列,看是否符合條件,同時只有噹噹前行之前的棋子都符合條件,才能繼續下一行,直到第八行,進行輸出。
代碼:
#include "stdafx.h" #include "iostream" using namespace std; 命名空間 int n=8,count=0; int x[8]; 數組的個數不能用字母n代替,應該用數字,要用字母的話得用#define 定義 void print(){ 輸出八皇後函數 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ 嵌套迴圈 if(j==x[i]) 當該列是棋子所在的第x[i]列時輸出1 cout<<"1"<<" "; else cout<<"0"<<" "; } cout<<endl; } cout<<"---------"<<endl; } void eight_queen(int r){ if(r==n){ print(); count++; return; return從當前方法即eight_queen中退出返回到該調用方法即主函數的語句處,繼續執行。如果不返回值時,方法類型必須為void;方法前有返回類型,則必須返回值,但如果是void,即使寫了值也不能返回數值。 } for(int i=0;i<n;i++){ x[r]=i; int ok=1; for(int j=0;j<r;j++){ if(r-x[r]==j-x[j]||r+x[r]==j+x[j]||x[j]==x[r]) { ok=0; if不加花括弧只能管到一行,不符合條件,ok覆蓋上面的值,變為0. break; } } if(ok) eight_queen(r+1); } } int main(int argc, char* argv[]) { eight_queen(0); cout<<"count="<<count<<endl; return 0; }