Problema del anillo de números primos (método de retroceso)

El anillo de números primos es un problema de programa de computadora. Se refiere a los n números enteros del 1 al n que forman un anillo. Si se suman dos números adyacentes cualesquiera, el resultado es un número primo, entonces el anillo se convierte en un anillo de números primos.

  Ahora es necesario ingresar una n, encontrar el número de anillos de números primos en un círculo de n números y especificar que el primer número es 1.

#include<iostream>
#include<math.h>
using namespace std;
int n=0;
int a[100];       //对应环 
int visit[100];  //标记数组 0表示未用 1表示已用 
int check(int k)  //判断数字x是否为整数 
{
	int i,n;
	n=(int)sqrt(k);
	for(i=2;i<=n;i++)
		if(k%i==0) return 0;
	return 1;     		
}

void dfs(int step)
{
	if(step==n&&check(a[0]+a[n-1])==1) //全部填满而且第一个元素和最后一个元素满足就输出 
	{
		for(int i=0;i<n;i++)
			cout<<a[i]<<' ';
			cout<<endl;
			return ;
	}
	else
	{
		for(int i=2;i<=n;i++)
		{
			if(visit[i]==0&&check(i+a[step-1])==1){    //i没有被占用且与前一个元素符合 
				a[step]=i;
				visit[i]=1;
				dfs(step+1);
				visit[i]=0;
			}
		}
	}
	
}
int main(void)
{
	cin>>n;
	a[0]=1;  //因为是环所以第一个元素固定 
	visit[1]=1; //1已用 
	dfs(1);	//从第一个元素开始 
	return 0;	
} 

Este tipo de problema de retroceso es similar al problema del circuito hamiltoniano de las ocho reinas.

Supongo que te gusta

Origin blog.csdn.net/a447332241/article/details/88035783
Recomendado
Clasificación