八皇后为什么斜线对角线有一条要用x-y+n-1

img


#include<bits/stdc++.h>
using namespace std;
int n,ans=0,a[23];
int b1[23],b2[23],b3[23];//记录同一列、对角线是否被占用 
void dfs(int x){//第x行的皇后放哪里 
    if(x>n){//所有皇后放置完毕 
        ans++;
        if(ans<=3){//输出前三种答案 
            for(int i=1;i<=n;i++){
                cout<<a[i]<<" ";
            }
            cout<<endl;
        }
        return;
    }
    for(int i=1;i<=n;i++){
        if(b1[i]==0&&b2[x+i]==0&&b3[**x-i+n+1**]==0){
            a[x]=i;
            b1[i]=1,b2[x+i]=1,b3[x-i+n+1]=1;
            dfs(x+1);
            b1[i]=0,b2[x+i]=0,b3[x-i+n+1]=0;
        }
    } 
}
int main(){
    cin>>n;
    dfs(1);
    cout<<ans;
    return 0;
}****

为什么斜线对角线有一条要用x-y+n-1,为什么不是x-y+n,而且为什么数组下标会出现负