???为什么这么写是错的,MLE了,必须要两个if分开写
作者:
会飞的泡泡
,
2020-11-21 15:42:18
,
所有人可见
,
阅读 496
#include <iostream>
using namespace std;
const int maxn =25;
int n,x,y,m;
char mm[maxn][maxn];
bool row[maxn],col[maxn],l[maxn],r[maxn];
void dfs(int x,int y,int m){
if(y==n){
y=0; x++;
}
if(x==n&&m==n){/////???为什么这么写是错的,MLE了,必须要两个if分开写
//if(m==n){
for(int i=0; i<n; i++){
puts(mm[i]);
}
puts("");
//}
return ;
}
dfs(x,y+1,m);
if(!row[x]&&!col[y]&&!l[x+y]&&!r[x-y+n]){
mm[x][y]='Q';
row[x]=col[y]=l[x+y]=r[x-y+n]=true;
dfs(x,y+1,m+1);
row[x]=col[y]=l[x+y]=r[x-y+n]=false;
mm[x][y]='.';
}
}
int main(){
cin>>n;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
mm[i][j]='.';
}
}
dfs(0,0,0);
return 0;
}
那个……这边建议问题都放到问答去qwq
因为你两个if放在一起是漏了一种x==n&&m!=n的情况 x==n的时候应该都要返回,m==n的时候是输出,但是如果是m!=n的时候 是要直接返回 你如果两个if写到一起的时候 在x==n&&m!=n的情况你会继续运行下去,这样就一直不返回知道MLE
对就是这个原因,谢谢啦
知道原因了!!!
n皇后问题