递归思想完成n皇后问题
生活随笔
收集整理的這篇文章主要介紹了
递归思想完成n皇后问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
已經(jīng)很長時間不敲代碼了,感覺自己越來與頹廢,所以現(xiàn)在又想做回一名苦逼的程序員,開啟自己的代碼之路。
我是根據(jù)視頻敲的,沒有題目,先看個四皇后問題吧。
所謂4皇后問題就是求解如何在4×4的棋盤上無沖突的擺放4個皇后棋子。在國際象棋中,皇后的移動方式為橫豎交叉的,因此在任意一個皇后所在位置的水平、豎直、以及45度斜線上都不能出現(xiàn)皇后的棋子,例子
要求編程求出符合要求的情況的個數(shù)
n皇后問題就是將4轉(zhuǎn)化為變量n。
用遞歸的方法首先要找到遞歸出口,這里我設(shè)用k循環(huán)所有行N,當(dāng)k=N時,循環(huán)結(jié)束。這里的k表示前0~k-1行已經(jīng)放置好了,沒毛病。
出口判斷好了之后就是找判斷條件,就是上文中紅色字體。
具體代碼如下:
#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);}} }
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的递归思想完成n皇后问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA - 202 Repeating
- 下一篇: 移动Web加速技术月报第2期