蒟蒻61分RE求助
查看原帖
蒟蒻61分RE求助
322717
vix_hentx楼主2022/8/6 11:45

n>=11时会出现问题

Segmentation fault with invalid memory

码:

#include <iostream>
#include <string>
#include <algorithm>
//#include <vector>
using namespace std;
int n,ansn=0;
string ans[1024];
const int maxn=14;
bool unadded(string x)
{
	for(int i=0;i<ansn;i++)
	{
		if(x==ans[i])return false;
	}
	return true;
}
void dfs(int y, string s = "#")
{
	if(y>n)//递归边界
	{
		//去重添加
		if(unadded(s))ans[ansn++]=s;//注意保存进去的int形式的(输出需要加上48)
		return;
	}
	//获取当前可用点
	int x = 1, flag;
	int possible[maxn]={0};
	while(x<=n)
	{
		flag=true;
		for (int i = 1; i < (int)s.length(); i++)
		{
			if( (s[i] == x ||i==y|| s[i]+i==x+y||s[i]+y==x+i))
			{
				flag=false;
				break;
			}
		}
		if(flag)
		{
			possible[++possible[0]]=x;//possible[0]存储possible的长度
		//	cout<<"y="<<y<<"时,当前有可用点x:"<<x<<endl;
		}
		x++;
	}
	//搜索可用点
	for(int i=1;i<=possible[0];i++)
	{
		dfs(y+1,s+(char)possible[i]);
	}
}
int main()
{
	cin>>n;
	dfs(1);
	sort(ans,ans+ansn);
	for(int i=0;i<3;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<int(ans[i][j])<<' ';
		}
		cout<<endl;
	}
	cout<<ansn;
}
2022/8/6 11:45
加载中...