其實是看到一位名為“活在二次元的偽觸”的博主昨天還是前天寫了篇這個題材的筆記,覺得有點意思,於是想自己來寫寫。
其實我發現上述那位同學寫
在國際象棋上擺放八個皇後,使其不能互相攻擊,即任意兩個皇後都不能處於同一行、同一列或同一斜線上,問有多少種擺法。
擴展到
一看,似乎要用到二維數組。其實不需要。一維數組就能判斷,比如
這種思路的實現方式網上大把,包括前面提到的那位同學,所以也就不要糾結有沒有改善有沒有提高之類的了,權當一次練習即可。
直接上代碼好了,覺得遞歸方法沒什麼好說的,空間想想能力好一點兒很容易理解。明天有空再寫寫非遞歸實現吧。
#include<iostream><fstream><iomanip><stdlib.h> Check( rowCurrent, *&NQueen); Print(ofstream &os, n, *&NQueen); Solve( rowCurrent, *&NQueen, n, &count, ofstream &os); Check( rowCurrent, *& i = (i <(NQueen[i] == NQueen[rowCurrent] || (abs(NQueen[i]-NQueen[rowCurrent]) == abs(i- ++ Print(ofstream &os, n, *&<< ( i = ;i < n;i++( j = ; j < n; j++<<(NQueen[i]==j?:<<setw(<<<< Solve( rowCurrent, *&NQueen, n, &count, ofstream &(rowCurrent == n) ++( i = ; i < n; i++= i; +,NQueen,n,count,os); n; count = ; cout<<<<>>(n<<<<< *NQueen = <<<<count<<<<
順便給出前面提到的那位同學的隨筆地址:
http://www.cnblogs.com/FZQL/p/3485616.html