已經很長時間不敲代碼了,感覺自己越來與頹廢,所以現在又想做回一名苦逼的程序員,開啟自己的代碼之路。
我是根據視頻敲的,沒有題目,先看個四皇后問題吧。
所謂4皇后問題就是求解如何在4×4的棋盤上無沖突的擺放4個皇后棋子。在國際象棋中,皇后的移動方式為橫豎交叉的,因此在任意一個皇后所在位置的水平、豎直、以及45度斜線上都不能出現皇后的棋子,例子
要求編程求出符合要求的情況的個數
n皇后問題就是將4轉化為變量n。
用遞歸的方法首先要找到遞歸出口,這里我設用k循環所有行N,當k=N時,循環結束。這里的k表示前0~k-1行已經放置好了,沒毛病。
出口判斷好了之后就是找判斷條件,就是上文中紅色字體。
具體代碼如下:
#include <iostream>
#include <cmath>
using namespace std;
int N;
int queenPos[100];
void NQueen(int k);int main()
{cin>>N;NQueen(0);return 0;
}
void NQueen(int k){int i;if(k==N){for(i=0;i<N;i++)cout<< queenPos[i]+1 << " ";cout<<endl;return;}for(i=0;i<N;i++){int j;for(j=0;j<k;j++){if(queenPos[j]==i||abs(queenPos[j]-i)==abs(k-j)){break;}}if(j==k){queenPos[k]=i;NQueen(k+1);}}
}