萌新求助搜索
  • 板块题目总版
  • 楼主KMSK
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/12/17 00:41
  • 上次更新2023/11/3 21:51:01
查看原帖
萌新求助搜索
472423
KMSK楼主2021/12/17 00:41

题目链接:P1219八皇后
代码有bug,故求助大佬,n=5时可以得到数组,但是等于6 7 8 v2就空了...
输出格式还没写好,主要想问搜索过程

用两个数组标记行和列,用另外两个数组标记两条对角线,其余就是常规的搜索

代码如下:

#include<iostream>
#include<vector>
using namespace std;
int n;
int a[20];//行
int b[20];//列
int c[50];//对角线1
int d[50];//对角线2
vector<int>v1;
vector<vector<int> >v2;
void Print()
{
	for(int i=0;i<v2.size();i++)
	{
		for(int j=0;j<v2[i].size();j++)
		{
			cout<<v2[i][j]<<" ";
		}
		cout<<endl;
	}
}
void dfs(int i,int j)
{
	if(i==n+1)
	{
		v2.push_back(v1);
		return; 
	}
	if(j>n)return;
	    int x;
		int y;
		x=i+j;
		if(i>=j)y=i-j;
		else y=j-i;
		if(a[i]||b[j]||c[x]||d[y])
		dfs(i,j+1);
		else
		{
			a[i]=b[j]=c[x]=d[y]=1;
			v1.push_back(j);
			dfs(i+1,1);
			v1.pop_back();
			a[i]=b[j]=c[x]=d[y]=0;
			//也有向右 
			dfs(i,j+1);
		}
}
int main()
{
   cin>>n;
   dfs(1,1);
   Print(); 
   return 0;
}  
2021/12/17 00:41
加载中...