小白求问:为什么N后问题中不需要考虑x+y=t这条直线?

liang23333 2015-09-09 10:36:57
n后问题:


#include<iostream>
#include<cmath>
using namespace std;
#define N 8
int a[N+1] = { 0 };
int sum;
bool place(int t)
{
for (int i = 1; i < t; i++)
{
if (abs(i - t) == abs(a[i] - a[t]) || a[i] == a[t])
return false;
}
return true;
}
void trial(int t)
{
if (t > N)
{
for (int i = 1; i <= N; i++)
cout << a[i] << " ";
cout << endl;
sum++;
}
else
{
for (int i = 1; i <= N; i++)
{
a[t] = i;
if (place(t))
trial(t + 1);
}
}
}
int main()
{
trial(1);
cout << sum << endl;
return 0;
}


源代码如图所示,运行正确,但是我想请问下为什么place函数中只考虑了y-x=t这条直线,不考虑y+x=t这条直线,就是
if (abs(i - t) == abs(a[i] - a[t]) || a[i] == a[t])这个表达式为什么不改成
if (abs(i - t) == abs(a[i] - a[t]) || a[i] == a[t]||abs(i+t)==abs{a[i]+a[t]))
为什么加上之后就错了,一直很疑问,求大神解惑。
...全文
62 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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