| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2158 人关注过本帖, 1 人收藏
标题:八皇后问题,为什么不能从第一种解开始打印输出92种全部解
取消只看楼主 加入收藏
zhisk
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-7
收藏(1)
 问题点数:0 回复次数:3 
八皇后问题,为什么不能从第一种解开始打印输出92种全部解
不知道为什么,下面的八皇后程序不能从第一种解开始打印输出全部的92种解来,请指教啊,先谢谢啦

/*该程序产生的最终结果存于当前工程目录下的result.txt文件中*/
#include<iostream.h>
#include<iomanip.h>
#include<fstream.h>
//用类定义一个节点,包含x坐标和y坐标以及该节点的值value
class CNode
{
public:
int x;
int y;
int value;
void SetValue(){value=1;}
void ClearValue(){value=0;}
};
CNode array[8][8];//定义一个8*8的节点矩阵
int cnt=0;//定义一个计数器
//打印函数,打印此时的矩阵数据
void PrintArray(ofstream& out)
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
out<<setw(3)<<array[i][j].value;
}
out<<endl;
}
return;
}
//判断a节点是否与位于a节点之前已存在所有任一节点位于同一直线上
int InSameLine(CNode a)
{
int i,j;
for(i=0;i<=a.y;i++)
for(j=0;j<(i<a.y?8:a.x);j++)
{
if(array[i][j].value==1)
{
if(a.x==array[i][j].x||a.y==array[i][j].y||
a.x-a.y==array[i][j].x-array[i][j].y||
a.x+a.y==array[i][j].x+array[i][j].y)
return 1;
}
}
return 0;
}
//依次产生所有的节点
void CreateNextNode(int row,ofstream out)
{
if(row==8)
{
out<<"第"<<cnt+1<<"种解法"<<endl;
PrintArray(out);
cnt++;
out<<endl;
return;
}
for(int j=0;j<8;j++)
{
if(!InSameLine(array[row][j]))
{
array[row][j].SetValue();
CreateNextNode(++row,out);
array[--row][j].ClearValue();
}
}
}
//主函数main()
void main()
{
ofstream outfile("result.txt");
if(!outfile)
{
cout<<"打开文件失败!"<<endl;
return;
}
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
array[i][j].x=j;
array[i][j].y=i;
array[i][j].value=0;
}
CreateNextNode(0,outfile);
outfile<<"总共有"<<cnt<<"种解法"<<endl;
outfile.close();
cout<<"传输文件完毕!"<<endl;
return;
}
搜索更多相关主题的帖子: 皇后 打印 输出 
2006-06-03 15:53
zhisk
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-7
收藏
得分:0 
不对啊,在我的机子上运行程序打印输出的是从第63种解开始的,并没能全部打印输出.你作了什么修改么?
2006-06-03 21:12
zhisk
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-7
收藏
得分:0 
我也用的是VC++6.0啊,我在我的同学机子上也试过了.打不出你给的哪个结果来.是怎么回事呢?
程序我检查没有什么问题,算法了对的.你帮忙看看吧
2006-06-04 14:03
zhisk
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-5-7
收藏
得分:0 
谢谢你的帮忙,你编译后生成的应用程序我下载了,可是由于文件不全不能运行.
我将继续查找问题原因所在.
2006-06-04 17:35
快速回复:八皇后问题,为什么不能从第一种解开始打印输出92种全部解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026402 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved