用二维数组来标记 但是错了
查看原帖
用二维数组来标记 但是错了
550074
cloudemakers楼主2022/8/5 16:02
#include<iostream>
#include<cstdio>
using namespace std;
int MAP[105][105]={0};//Queen place
int ans=0,p;
void dfs(int e){
	if (e>p){
		ans+=1;
		if (ans<=3){
			for (int j=1;j<=p;j++){
				for (int I=1;I<=p;I++){
					if (MAP[I][j]==2) printf("%d ",I);
				}
			}
			printf("\n");
		}
		return ;
	}
	else {
		for (int i=1;i<=p;i++){
			if (MAP[i][e]==0){
			for (int j=1;j<=p;j++){
				MAP[j][e]=1;//行占领 
				MAP[i][j]=1;//列占领 
				if (1<=j<=p&&1<=i+e-j<=p) MAP[j][i+e-j]=1;//右斜占领 
				if (1<=e-j&&1<=i-j) MAP[i-j][e-j]=1;//左斜占领 
				if (e+j<=p&&i+j<=p) MAP[i+j][e+j]=1;//左斜占领 
		}
			MAP[i][e]=2;
			dfs(e+1);
			for (int j=1;j<=p;j++){
				MAP[i][j]=0;
				MAP[j][e]=0;
				if (1<=j<=p&&1<=i+e-j<=p) MAP[j][i+e-j]=0;
				if (1<=e-j&&1<=i-j) MAP[i-j][e-j]=0;
				if (e+j<=p&&i+j<=p) MAP[i+j][e+j]=0;
			}
			MAP[i][e]=0;
		}
	}
	}
}
int main(){
	scanf("%d",&p);
	dfs(1);
	printf("%d",ans);
}

应该是else里面标记的环节错了 错在哪了?

2022/8/5 16:02
加载中...