-----------------------------------------------------------------------------------------------------------
写这篇文章的目的,是为了很好的理解八皇后问题,网上一大堆八皇后
问题的解决方法的代码,看后真是失望之极,因为他们没有说出最关键的问题,
就是我们如何判断皇后是否在同一对角线上?这是很多初学者最困惑的地方,
网上的例子丝毫没有提到这个问题,真是失望之极。
-----------------------------------------------------------------------------------------------------------
现在让我们判断两个元素是否在同一对角线上。
数据元素一 arr1【a】【b】
数据元素二 arr2【m】【n】
//当两个数组元素的行坐标和列坐标,各自进行相减或相加所得的结果一样时,则它们在同一对角线上面
//这个你可以自己画图来验证,当初我也是这样推敲出来的
if(a-b==m-n || a+b=m+n)
cout<<"arr1和arr2在同一对角线上";
------------------------------------------------------------------------------------------------------------------
程序验证:
#include <iostream>
#include <Windows.h>
using namespace std;
/*
函数:Catercorner
函数作用:输出二维数组中某一个元素的所有对角线元素
参数:
arrRow为数组的行数
arrCol为数组的列数
m为元素的行坐标,n为元素的列坐标
*/
void Catercorner(int arrRow,int arrCol,int m,int n)
{
if (m>=arrRow||m<0)
{
cout<<"元素横坐标超界";
return;
}
if (n>=arrCol||n<0)
{
cout<<"元素列坐标超界";
return;
}
for(int i=0;i<arrCol;i++)
cout<<" "<<i<<"";
cout<<endl;
for(int i=0;i<arrRow;i++)
{
cout<<i<<" ";
for(int j=0;j<arrCol;j++)
{
if(m-n==i-j||m+n==i+j)//是对角线元素时,输出实心方框
cout<<"■ ";
else
cout<<"□ ";//非对角线元素时,输出空心方框
}
cout<<"\n";
}
}
void main(void)
{
//设置控制台输出行数和列数
system("mode con:cols=100 lines=1000");
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
printf("数组元素Array[%d][%d]的所有对角元素\n",i,j);
Catercorner(8,8,i,j);
cout<<endl;
}
cin.get();
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//效果截图
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------