Premier Anneau Problème principal problème de l'anneau

Profitons de cette question Kankan: premier anneau problème
Insérer ici l'image Description
Insérer ici l'image Description
vient de commencer cette idée ou problèmes de circulation, puis le recyclage pensé ah n'est pas possible, alors il ne peut être récursive, mais récursive comment le faire? ?

récursion

Récursion recherche récursive à l'exportation et le corps récursif il
exportations récursives cette question est de déterminer votre dernier chiffre et le premier chiffre (c. -à- 1) et est pas un nombre premier, alors comment juger?

void dfs(int num,int n)
{
	int i;
	if(num>=n+1&&flag[a[n]+1]==1)
	{
		for(i=1;i<n;i++)
		{
			printf("%d ",a[i]);
		}
		printf("%d\n",a[n]);
		return ;
	}
	else
	{
		for(i=2;i<=n;i++)
		{
			if(visit[i]==0&&flag[a[num-1]+i])
			{
				visit[i]=1;
				a[num]=i;
				dfs(num+1,n);
				visit[i]=0;
			}
		}return ;
	}
}

num représente le nombre de chiffres ici, j'était sur le point de décharge, que les premiers numéros, n n est l'entrée de notre

Puisque nous bien organisé dans un tableau de nombres a, et commencer par un indice 1, donc un total de n numérique nécessite n + 1, la décision finale que le n-ième chiffre, drapeau [a [n] +1 ] indique la détermination finale et un premier nombre et le nombre est pas un nombre premier.
Si oui, alors la sortie du contenu du tableau a
, sinon, commencent à en juger par le nombre 2 n:
1. déterminer si le nombre accès est
2. Ce nombre est déterminé et un tableau dans un numérique est premier et
sinon et il a été visité et est un nombre premier, ce nombre est marqué comme visité, et stocké dans le un tableau, puis récursive de trouver un certain nombre, et enfin n'oubliez pas de visiter un marquage clair, car à la fin visiteront certainement à nouveau faire marche arrière.

code mise en œuvre

#include<stdio.h>
int prime[13]={2,3,5,7,11,13,17,19,23,29,31,37,41};
int n,flag[40]={0},visit[21]={0},a[21]={0 };
void dfs(int num,int n)
{
	int i;
	if(num>=n+1&&flag[a[n]+1]==1)
	{
		for(i=1;i<n;i++)
		{
			printf("%d ",a[i]);
		}
		printf("%d\n",a[n]);
		return ;
	}
	else
	{
		for(i=2;i<=n;i++)
		{
			if(visit[i]==0&&flag[a[num-1]+i])
			{
				visit[i]=1;
				a[num]=i;
				dfs(num+1,n);
				visit[i]=0;
			}
		}return ;
	}
}
int main()
{
	int i,k=0,count=1;
	for(i=0;i<40;i++)
	{
		if(i==prime[k])
		{
			flag[i]=1;
			k++;
		}
	}
	while(scanf("%d",&n)!=EOF&&n!=0)
	{
		for(i=1;i<=n;i++)
		{
			a[i]=0;
			visit[i]=0;
		}
		a[1]=1;visit[1]=1;
		printf("Case %d:\n",count++);
		if(n%2==1)
		{
			if(n==1) printf("1\n");
			else printf("\n");
		} 
		else
		{
			dfs(2,n);
			printf("\n");
		}
	}
	return 0;
}

Faites attention aux réseaux d'accès et des réseaux de stockage à zéro.
De plus, si un nombre impair d'entrées, il les nombres premiers ne forment un cycle, puisque l'anneau premier est nécessairement un nombre impair thermocouple un côté.
Si elle l' est, 1 sortie directe 1 sur elle.

Publié 22 articles originaux · louange gagné 1 · vues 1053

Je suppose que tu aimes

Origine blog.csdn.net/Doro_/article/details/104092898
conseillé
Classement