大佬们,请帮我看一下这个问题
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int n;
bool col[N],row[N],dg[N],udg[N];//行号是不用的,因为用i遍历过了
char pan[N][N];
void dfs(int u){
if(u==n)
{
for(int i=0;i<n;i++)
puts(pan[i]);//i应该等于几?
puts("");
return;
}
for(int i=0;i<n;i++){
if(!col[i]&&!udg[u+i]&&!dg[i-u+n])
/*
这个地方在商榷,已经得到解答,这个地方
col[i]=udg[u+i]=dg[i-u+n]=true;和
col[i]=udg[n-u+i]=dg[u+i]=true;
*******************************
大佬们,我觉得y总这个地方是不是写反了,
正对角线y=x+b;截距b=y-x;
反对角线y=-x+b;截距b=y+x;
(根据题目u代表x,i代表y)
所以应该是
col[i]=udg[u+i]=dg[i-u+n]=true;
而不是
col[i]=udg[n-u+i]=dg[u+i]=true;
其中n是偏移量,不知道我想的对不对,我觉得八成是我想的有问题
但是这两种写法都能通过,不知道为啥
*/
{
pan[u][i]='Q';
col[i]=udg[u+i]=dg[i-u+n]=true;
dfs(u+1);
col[i]=udg[u+i]=dg[i-u+n]=false;
pan[u][i]='.';
}
}
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)//粗心
pan[i][j]='.';
dfs(0);
}
这两个不就是 udg和dg里面的参数换了一下吗。。udg和dg这俩就是个代号写成啥都一样
n-u+i和i-u+n 最后结果也是一样的
所以到底问了个个啥?。。
这个问题已经解决了,这个问题是因为我没有弄明白y轴正方向是向上还是向下