0
点赞
收藏
分享

微信扫一扫

经典题——n皇后问题(回溯法)

_阿瑶 2022-04-05 阅读 52
c++

AC Code:

#include<iostream>

using namespace std;
const long long maxn=100000;
int vis[3][maxn];//vis[0][]代表列vis[1][]代表主对角线,vis[2][]代表副对角线 ,0可以走,1不能走 
int C[maxn];
int n,count=0;

void dfs(int cur)//cur代表行 
{
	if(cur==n+1)
		count++;
	else
	{
		for(int j=1;j<=n;j++)//j代表列 
		{
			if(vis[0][j]==0&&vis[1][cur-j+n]==0&&vis[2][cur+j]==0)
			{
			C[cur]=j;//代表cur行j列可以放; 
			vis[0][j]=vis[1][cur-j+n]=vis[2][cur+j]=1;//将cur行j列所在的列,对角线置为0 
			dfs(cur+1);//继续下一行搜索 
			vis[0][j]=vis[1][cur-j+n]=vis[2][cur+j]=0;//搜索结束后一定要将cur行j列所在的列,对角线改为1
			}
		}
    return;
	}
}

int main()
{
	cin>>n;
	dfs(1);
	cout<<count;
	return 0;
}
举报

相关推荐

0 条评论