经典的那个八皇后,我判断用的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;
}
这样就对了
蒟蒻求大佬解答~