萌新题解 求过啊QaQ
看了诸多大大的题解 好长啊
鄙人尝试了一下 发现可以简单点~
八皇后问题详解
著名的八皇后问题是由棋手马克斯·贝瑟尔在1848年提出来的,要求在 8 × 8 的棋盘上摆放8个皇后,使”皇后“们不能互相攻击 ,当任意两个皇后都不处于同一行、同一列或同一条斜线上时就不会相互攻击,即为目标解。
例如下图:
读完上面的内容,想必您已经对此问题有了一定的认识,也就是我们需要在一个8 × 8的矩阵中摆放8个不在同一行,不在同一列,并且不在同一对角线上的棋子,计算出有多少种摆放的方法。
我们知道在一个矩阵中的同一个右对角线上所有元素的横坐标和纵坐标之和是一个定值,即横坐标与纵坐标之和,而同一左对角线上的所有元素的坐标也有特点,即都是纵坐标与横坐标的差值。可以看下图:
那么这个时候,就能够轻易的解决问题了,以下是我的代码:
蒟蒻开始写题解了······跪求各位神犇轻喷······
#include<bits/stdc++.h>
using namespace std;
int main()
{
cout<<"92";
return 0;
}
~
~
~
~
搞错了,再来(用深度优先搜索)
#include<bits/stdc++.h>
using namespace std;
int t=0;
int a[30],b[30],c[30];
void f(int i)
{
for(int j=1;j<=8;j++)
{
if(a[j]==0&&b[i+j]==0&&c[j-i+8]==0)//分别是竖着、横着、斜着
{
if(i==8)
t++;
a[j]=1;//标记
b[i+j]=1;
c[j-i+8]=1;
f(i+1);//进行下一个
a[j]=0;
b[i+j]=0;//取消标记
c[j-i+8]=0;
}
}
}
int main()
{
f(1);
cout<<t;
return 0;
}
王姐撒花————花
花 花 花花花花花花花花花花花花花花花花花花花花花花花花
花花花花花花花花花花花花花花花花花花花花花花花花花花花花
花花花花花花花花花花花花花花(还认识这个字吗)
那是因为……………………………………我懒 ,再说你该去写这道题了