素数环(dfs)

alt

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[25];
ll f[25];//判断是否用过

bool isprime(ll n)
{
	if(n==1)
		return false;
	else 
		for(ll i=2;i<=n/i;i++)
			if(n%i==0)
				return false;
	return true;
}

void dfs(ll k)//确定第k个以及k后面的数字 
{
	for(ll i=1;i<=n;i++)
	{
		if(f[i]==0&&(k==1||isprime(i+a[k-1])))
		{
			a[k]=i;
			f[i]=1;
			if(k==n&&isprime(a[k]+a[1]))
			{
				for(ll j=1;j<=n;j++)
				{
					cout<<a[j];
					if(j==n)
						cout<<endl;
					else
						cout<<" ";
				}
			}
			
			else 
				dfs(k+1);
				
			f[i]=0;//回溯
		}
	}
}

int main()
{
	cin>>n;
	dfs(1);
	
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[25];
ll f[25];//判断是否用过

bool isprime(ll n)
{
	if(n==1)
		return false;
	else 
		for(ll i=2;i<=n/i;i++)
			if(n%i==0)
				return false;
	return true;
}

void print(ll x)//输出以1为首的满足条件的排序 
{
	if(a[1]==x)
		for(ll i=1;i<=n;i++)
		{
			cout<<a[i];
			if(i==n)
				cout<<endl;
			else 
				cout<<" ";
		}
}

void dfs(ll k)
{
	for(ll i=1;i<=n;i++)
	{
		if(f[i]==0&&(k==1||isprime(i+a[k-1])))
		{
			a[k]=i;
			f[i]=1;
			if(k==n&&isprime(a[1]+a[k]))
				print(1);
			else 
				dfs(k+1);
				
			f[i]=0;
		}	
	} 
}

int main()
{
	cin>>n;
	dfs(1);
	
	return 0;
}

全部评论

相关推荐

码农索隆:这种hr,建议全中国推广
点赞 评论 收藏
分享
Rena1ssanc...:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务