資源簡介
N皇后問題解法,采用隊列分支限界算法。c++編程。

代碼片段和文件信息
#include?
#include?
using?namespace?std;
void?NQueens();
bool?CanPos(int?*pos?int?level?int?i);
int?*?GetNQueensPos(int?n);
void?main()
{
NQueens();
}
int?*?GetNQueensPos(int?n)
{
int?*pos?=?new?int[n];
int?level?=?0;
queue?*QPos?=?new?queue();
queue?*QLevel?=?new?queue();
while?(true)
{
if?(level?==?n)
{
break;
}
for?(int?i?=?1;?i?<=?n;?++i)
{
if?(CanPos(pos?level?i))
{
pos[level]?=?i;
QPos->push(pos);
QLevel->push(level?+?1);
break;
}
}
pos?=?QPos->front();
QPos->pop();
level?=?QLevel->front();
QLevel->pop();
}
return?pos;
}
bool?CanPos(int?*pos?int?level?int?i)
{
for?(int?j?=?0;?j? {
if?(abs(pos[j]?-?i)?==?abs(j?-?level)?||?(pos[j]?==?i))
{
return?false;
}
}
return?true;
}
void?NQueens()
{
FILE?*file;
if?((file?=?fopen(“input.txt“?“r“))?==?NULL)
{
cout?<“Couldn‘t?find?the?file?‘input.txt‘!“?< }
else
{
int?n;
fscanf?(file?“%d“?&n);
fclose(file);
if?((file?=?fopen(“output.txt“?“w“))?==?NULL)
{
cout?<“Couldn‘t?create?the?file?‘output.txt‘!“?< }
else
{
int?*pos?=?GetNQueensPos(n);
cout?< for?(int?i?=?0;?i? {
fprintf?(file?“%d?“?pos[i]);
cout?< }
cout?< fclose(file);
}
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1442??2008-12-04?14:45??n皇后問題\n皇后問題.cpp
?????文件?????????10??2008-12-17?20:34??n皇后問題\output.txt
?????文件??????????1??2008-12-04?14:45??n皇后問題\input.txt
?????目錄??????????0??2008-12-09?12:22??n皇后問題
-----------?---------??----------?-----??----
?????????????????1453????????????????????4
評論
共有 條評論