Profitons de cette question Kankan: premier anneau problème
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.