二维数组标记为啥不行
查看原帖
二维数组标记为啥不行
973361
ly111222楼主2023/10/19 16:50
#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;
}

2023/10/19 16:50
加载中...