蒟蒻在线求助大佬
  • 板块灌水区
  • 楼主taotao2007
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/12/22 22:11
  • 上次更新2023/11/5 05:47:19
查看原帖
蒟蒻在线求助大佬
304681
taotao2007楼主2020/12/22 22:11

经典的那个八皇后,我判断用的int型不对,为啥换成bool型就对了?有啥区别吗?(不是洛谷原题)

#include<bits/stdc++.h>
using namespace std;
int ans[10],row[9],line1[20],line2[9],tot;
void print(){
    tot++;
    for(int i=1;i<=8;i++)cout<<"("<<i<<","<<ans[i]<<") ";
    cout<<endl;
}
void dfs(int k){
    for(int i=1;i<=8;i++){
        if(!row[i]&&!line1[k+i]&&!line2[8+k-i]){
            ans[k]=i;
            if(k==8)print();
            row[i]=1;
            line1[k+i]=1;
            line2[8+k-i]=1;
            dfs(k+1);
            row[i]=0;
            line1[k+i]=0;
            line2[8+k-i]=0;
        }
    }
}
int main(){
    dfs(1);
    cout<<tot;
    return 0;
}

以上是错的代码

#include<bits/stdc++.h>
using namespace std;
int ans[10],tot;
bool row[9],line1[20],line2[9];
void print(){
    tot++;
    for(int i=1;i<=8;i++)cout<<"("<<i<<","<<ans[i]<<") ";
    cout<<endl;
}
void dfs(int k){
    for(int i=1;i<=8;i++){
        if(!row[i]&&!line1[k+i]&&!line2[8+k-i]){
            ans[k]=i;
            if(k==8)print();
            row[i]=1;
            line1[k+i]=1;
            line2[8+k-i]=1;
            dfs(k+1);
            row[i]=0;
            line1[k+i]=0;
            line2[8+k-i]=0;
        }
    }
}
int main(){
    dfs(1);
    cout<<tot;
    return 0;
}

这样就对了

蒟蒻求大佬解答~

2020/12/22 22:11
加载中...