| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖
标题:[求助]请大家看一下这段程序有什么问题
只看楼主 加入收藏
dlgdd
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-18
收藏
 问题点数:0 回复次数:3 
[求助]请大家看一下这段程序有什么问题

我自己写的八皇后问题,感觉没什么问题,便编译就是通过不了,哪位达人请帮忙看一下,顺便教下二维数组作为参数的话应该怎样操作。谢谢了。如果思路本身有问题的话也欢迎指出,谢谢。

#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <fstream>
using namespace std;

#pragma argsused

//判断同一行中是否已有棋子
bool lnRow(int lnE[8][8],int i)
{
for(int Rj=0;Rj<8;Rj++)
if(!lnE[i][Rj])
return false;
return true;
};

//判断同一列中是否已有棋子
bool lnCom(int lnE[8][8],int j)
{
for(int Ci=0;Ci<8;Ci++)
if(!lnE[Ci][j])
return false;
return true;
};

//判断对角线上是否已有棋子
bool lnDui(int lnE[8][8],int i,int j)
{
for(int k=0;k<8;k++)
{
if((i-k)>=0&&(j-k)>=0&&lnE[i-k][j-k])
return false;
else if ((i-k)>=0&&(j+k)<8&&lnE[i-k][j+k])
return false;
else if((i+k)<8&&(j-k)>=0&&lnE[i+k][j-k])
return false;
else if((i+k)<8&&(j+k)<8&&lnE[i+k][j+k])
return false;
}
return true;
};

//将棋子放到棋盘上使满足八皇后的条件

void Eque(int s,int t,int lnEq[8][8])
{ int count=0;
if (lnRow(lnEq[0][],s)
&&nCom(lnEq[0][],t)
&&lnDui(lnEq[0][],s,t))
{
lnEq[s][t]=1;
count=t;
Eque(++s,0,lnEq[0][]);
}
else if(t<8)Eque(s,++t,lnEq[0][]);
else Eque(--s,count+1,lnEq[0][]);
//打印棋盘情况
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<lnEq[i][j]<<' ';
cout<<endl;
}

};


int main(int argc, char* argv[])
{ int i =0,j =0;
int lnEight[8][8];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
lnEight[i][j]=0;
Eque(0,0,lnEight[0][]);

//-----------------打印棋盘的情况-------------
/* for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<lnEight[i][j]<<' ';
cout<<endl;
} */
getchar();
return 0;
}
//---------------------------------------------------------------------------

搜索更多相关主题的帖子: 二维 include 
2007-09-21 10:14
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

#include <vcl.h> //这个不知道有没有问题,我的编译器没有找到这个头文件
#pragma hdrstop

//---------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <fstream>
using namespace std;

#pragma argsused

bool lnRow(int lnE[8][8],int i)
{
for(int Rj=0;Rj<8;Rj++)
if(!lnE[i][Rj])
return false;
return true;
};

bool lnCom(int lnE[8][8],int j)
{
for(int Ci=0;Ci<8;Ci++)
if(!lnE[Ci][j])
return false;
return true;
};

bool lnDui(int lnE[8][8],int i,int j)
{
for(int k=0;k<8;k++)
{
if((i-k)>=0&&(j-k)>=0&&lnE[i-k][j-k])
return false;
else if ((i-k)>=0&&(j+k)<8&&lnE[i-k][j+k])
return false;
else if((i+k)<8&&(j-k)>=0&&lnE[i+k][j-k])
return false;
else if((i+k)<8&&(j+k)<8&&lnE[i+k][j+k])
return false;
}
return true;
};

void Eque(int s,int t,int lnEq[8][8])
{ int count=0;
if(lnRow(lnEq,s)&&lnCom(lnEq,t)&&lnDui(lnEq,s,t)) //这句有问题,你对照一下
{
lnEq[s][t]=1;
count=t;
Eque(++s,0,lnEq); //这句有问题,你对照一下
}
else if(t<8)Eque(s,++t,lnEq);//这句有问题,你对照一下
else Eque(--s,count+1,lnEq);//这句有问题,你对照一下

for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<lnEq[i][j]<<' ';
cout<<endl;
}

};


int main(int argc, char* argv[])
{ int i =0,j =0;
int lnEight[8][8];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
lnEight[i][j]=0;
Eque(0,0,lnEight);


getchar();
return 0;
}


雁无留踪之意,水无取影之心
2007-09-21 11:10
dlgdd
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-18
收藏
得分:0 
谢谢楼上的,
编译通过了,但是运行时会出错,不知道什么问题,好像是堆栈上溢。你运行通过了吗?
#include <vcl.h> //这个不知道有没有问题,我的编译器没有找到这个头文件
这个头文件可以去掉,我也不知道是什么,新建一个工程就存在了。
2007-09-21 11:38
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

你是按对角线这样控制的棋盘吧,这样比用数组更好,给你个连接,你自己参照下。有问题提出来讨论!
http://bbs.bc-cn.net/dispbbs.asp?boardid=56&replyid=193319&id=147967&page=1&skin=0&star=1

5,6楼 !


Fight  to win  or  die...
2007-09-21 12:46
快速回复:[求助]请大家看一下这段程序有什么问题
数据加载中...
 
   



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

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