資源簡介
回溯實現n后問題,用c語言實現,默認定義皇后個數為五個,可以自己定義,輸出排列結果,本程序只是簡單的利用回溯法實現五皇后問題,

代碼片段和文件信息
#include?
#include
#include
#define?N?5?/*?定義棋盤大小?*/
static?int?sum;?/*?當前已找到解的個數?*/
static?int?x[N];?/*?記錄皇后的位置x[i]=j表示皇后放在棋盤的第i行的第j列?*/
/*?確定某一位置皇后放置與否放置則返回1反之返回0?*/
int?place(int?k)
{
????int?j;?
????/*?測試皇后k在第k行第x[k]列時是否與前面已放置好的皇后相攻擊.?x[j]?==?*/
????/*?x[k]?時,兩皇后在同一列上;abs(k?-?j)?==?abs(x[j]?-?x[k])?時,兩皇?*/
????/*?后在同一斜線上。兩種情況兩皇后都可相互攻擊,故返回0表示不符合條件。*/
????for?(j?=?0;?j?????????if?(x[j]?==?x[k]?||?abs(j?-?k)?==?abs(x[j]?-?x[k]))?return?0;
????return?1;
}
/*?打印棋局?*/?
void?chessboard()
{
????int?ij;
?????printf(“第%d種解法:\n“?++?sum);?
?????for?(i?=?0;?i??????????for?(j?=?0;?j??????????????if?(j?==?x[i])?printf(“Q???“);
?????????????else?printf(“*???“);
?????????printf(“\n“);
?????}
?????printf(“\n“);
}
/*?回溯搜索解空間?*/
void?backtrack()
{
????int?k?=?0;
????x[0]?=?-1;
????while?(k?>=?0)?{
????????x[k]?+=?1;?/*?向右移一列?*/
????????/*?向右移至出最右列或可以放置皇后的列?*/
????????while?((x[k]?????????if?(x[k]?????????????if?(k?==?N?-?1)?chessboard();?/*?已移至最后一行?*/
????????????else?x[++?k]?=?-1;?/*?向下移一行?*/
????????else?k?--;?/*?回溯到上一行?*/
????}
}
int?main(void)
{
????backtrack();
????getch();
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????520??2009-12-30?20:34??c實現n后問題\算法二.dsw
?????文件??????33792??2009-12-30?20:49??c實現n后問題\算法二.ncb
?????文件??????33792??2010-01-04?15:08??c實現n后問題\Debug\vc60.idb
?????文件??????45056??2010-01-04?15:08??c實現n后問題\Debug\vc60.pdb
?????文件?????203616??2009-12-30?20:36??c實現n后問題\Debug\算法二.pch
?????文件?????185012??2009-12-30?20:37??c實現n后問題\Debug\算法二.ilk
?????文件?????180267??2009-12-30?20:37??c實現n后問題\Debug\算法二.exe
?????文件?????435200??2009-12-30?20:37??c實現n后問題\Debug\算法二.pdb
?????文件?????188848??2010-01-04?15:08??c實現n后問題\Debug\e.ilk
?????文件?????180262??2010-01-04?15:08??c實現n后問題\Debug\e.exe
?????文件?????435200??2010-01-04?15:08??c實現n后問題\Debug\e.pdb
?????文件?????223616??2009-12-31?00:56??c實現n后問題\Debug\e.pch
?????文件???????4799??2010-01-04?15:08??c實現n后問題\Debug\e.obj
?????文件????????883??2009-12-30?20:37??c實現n后問題\算法二.plg
?????文件??????48640??2009-12-30?20:49??c實現n后問題\算法二.opt
?????文件???????4279??2009-12-30?20:49??c實現n后問題\算法二.dsp
?????文件??????41984??2010-01-04?15:09??c實現n后問題\e.ncb
?????文件????????721??2010-01-04?15:08??c實現n后問題\e.plg
?????文件???????3341??2010-01-04?15:08??c實現n后問題\e.dsp
?????文件???????1485??2010-01-04?15:08??c實現n后問題\e.cpp
?????文件??????48640??2010-01-04?15:09??c實現n后問題\e.opt
?????文件????????510??2010-01-04?15:09??c實現n后問題\e.dsw
?????目錄??????????0??2009-12-30?20:34??c實現n后問題\Debug
?????目錄??????????0??2009-12-30?20:34??c實現n后問題
-----------?---------??----------?-----??----
??????????????2300463????????????????????24
評論
共有 條評論