二维数组标记为啥不行

P1219 [USACO1.5] 八皇后 Checker Challenge

ly111222 @ 2023-10-19 16:50:23

#include <bits/stdc++.h> 
using namespace std;
int mark[15][15],ans[15],n,sum,num;
void dfs(int x){
    if(x>n){
        sum++; 
        if(sum<=3){
            for(int i=1;i<=n;i++){
                cout<<ans[i]<<' ';
            }
            cout<<'\n';
        }
        return ;
    }
    for(int i=1;i<=n;i++){ 
        if(mark[x][i]==0){
            ans[x]=i;
            //竖列
            for(int j=x;j<=n;j++){
                mark[j][i]++;
            } 
            //两个斜列
            for(int j=x+1;j<=n;j++){
                mark[j][i-(j-x)]++;
            } 
            for(int j=x+1;j<=n;j++){
                mark[j][i+(j-x)]++;
            }
            dfs(x+1);
            //竖列
            for(int j=x;j<=n;j++){
                mark[j][i]--;
            } 
            //两个斜列
            for(int j=x+1;j<=n;j++){
                mark[j][i-(j-x)]--;
            } 
            for(int j=x+1;j<=n;j++){
                mark[j][i+(j-x)]--;
            }
            //ans[x]=0;//回溯
        }
    }
}
int main(){
    cin>>n;
    dfs(1);
    cout<<sum;
    return 0;
}

by myl0219 @ 2023-10-23 16:44:44

没问题对的


|