?? 八皇后.cpp
字號:
#include<iostream>
#include<cmath>
using namespace std;
void queen(int row/*行*/, int col/*列*/)
{
static int queen_col[8],count=0,i;
for(i= 0;i<row;i++)
if(col==queen_col[i]/*2皇后再同一列上*/||row-i==abs(queen_col[i]-col)/*2皇后在同一對角線上*/) return;
queen_col[row]=col;//記錄皇后的位置
if(row<7)
for(int i=0;i<8;i++) queen(row+1,i);//填寫下一行皇后可能的位置
else //輸出八皇后問題可行方案
{
cout <<'('<<++count<<')'<<endl;
for(i=0;i <8;i++)
{
for(int j=0;j<8;j++) cout<<(j==queen_col[i]);
cout<<endl;
}
cin.get();
}
}
void main()
{
cout<<"按回車鍵查看下一種擺放方法:"<<endl;
for (int i=0;i <8;i++) queen(0,i);//填寫皇后第一皇可能出現的位置
}
//總體思路是先填第一行皇后可能的位置 for (int i=0;i<8;i++) queen(0,i);
//然后檢查這個皇后位置是否可行 通過這句代碼檢測
//for (i = 0;i<row;i++)
//if (col==queen_col[i]/*2皇后再同列上*/ | | row - i ==abs(queen_col[i]-col)/*2皇后在對角線上*/) return;
//如不可行就把它裁剪掉 在檢查另一個皇后位置
//如可行 就把這個位置記錄到數組 queen_col[8]中去,
//queen_col[8] 用來記錄皇后所在的位置,queen_col[0]表示皇后在第一行的queen_col[0]列 queen_col[1]表示皇后在第一行的queen_col[1]列 等
//然后檢測下一行皇后可能出現的位置 if (row <7) for (int i=0;i <8;i++) queen(row+1,i);
//row ==7時 表示已經得到一組解 ,然后輸出
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -