关于八皇后问题

植魂人 2017-11-02 10:14:05
看别人写的八皇后问题的枚举法解决,但是颜色标注出来的有些看不懂,不是定义的数组是QueenArr[8]嘛?为什么他的i<=8且还有QueenArr[i]的形式,那不是数组越界了吗?望哪位有心人帮忙解答下

bool isFight(int QueenArr[])
{
for (int i = 1; i <= 8; i++)
{
for (int j = 0;j <= i - 1;j++)

{
if (QueenArr[i] == QueenArr[j])//说明在同一列,返回有争斗
{
return true;
}
if (abs(QueenArr[i] - QueenArr[j]) == abs(i - j))//45度角是否有争斗
{
return true;
}
}
}
return false;
}
void enumQueenPosition(int QueenArr[], int &nSolution)
{
for (QueenArr[0] = 0; QueenArr[0] < 8; QueenArr[0]++)
for (QueenArr[1] = 0; QueenArr[1] < 8; QueenArr[1]++)
for (QueenArr[2] = 0; QueenArr[2] < 8; QueenArr[2]++)
for (QueenArr[3] = 0; QueenArr[3] < 8; QueenArr[3]++)
for (QueenArr[4] = 0; QueenArr[4] < 8; QueenArr[4]++)
for (QueenArr[5] = 0; QueenArr[5] < 8; QueenArr[5]++)
for (QueenArr[6] = 0; QueenArr[6] < 8; QueenArr[6]++)
for (QueenArr[7] = 0; QueenArr[7] < 8; QueenArr[7]++)
{
if (isFight(QueenArr) == true)
{
continue;
}
else
{
nSolution++;
ShowQueen(QueenArr, 8, nSolution);
}
}
}
...全文
221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2017-11-04
  • 打赏
  • 举报
回复
你确定不出错???
植魂人 2017-11-04
  • 打赏
  • 举报
回复
我确定的可以运行,自己也试过,完全没问题,反倒是更改后就是各种问题,运行不了。
FoolCarpe 2017-11-03
  • 打赏
  • 举报
回复
可编译可运行; 但是i = 8,肯定越界,可能并未运行到i=8时刻,已经return了
gaoan000 2017-11-03
  • 打赏
  • 举报
回复
传进来的数组有查看过吗?
自信男孩 2017-11-03
  • 打赏
  • 举报
回复
若QueenArr是的实参是8个元素的数组,那么标红色的循环确实是越界访问;当i=8时就越界了

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧