33,027
社区成员




■□□□ hλ: 1 . . .
■□□□ 2 . . .
■□□□ 3 . . .
■□□□ 4 . . .
No: 1
4 . . .
3 . . .
2 . . .
1 . . .
□□□□ hλ: . . . .
■□□□ 1 . . .
■□□□ 2 . . .
■■□□ 4 1 . .
No: 2
. . . .
4 . . .
3 . . .
1 2 . .
No: 3
. . . .
4 . . .
2 . . .
1 3 . .
No: 4
. . . .
3 . . .
2 . . .
1 4 . .
□□□□ hλ: . . . .
□□□□ . . . .
■■□□ 2 1 . .
■■□□ 3 2 . .
No: 5
. . . .
. . . .
3 4 . .
1 2 . .
No: 6
. . . .
. . . .
2 4 . .
1 3 . .
□□□□ hλ: . . . .
□□□□ . . . .
■□□□ 1 . . .
■■■□ 4 2 1 .
No: 7
. . . .
. . . .
4 . . .
1 2 3 .
No: 8
. . . .
. . . .
3 . . .
1 2 4 .
No: 9
. . . .
. . . .
2 . . .
1 3 4 .
□□□□ hλ: . . . .
□□□□ . . . .
□□□□ . . . .
■■■■ 4 3 2 1
No: 10
. . . .
. . . .
. . . .
1 2 3 4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check_invo(int *p,int len){
int i;
int *a,*b;
a=(int*)malloc(sizeof(int)*len);
b=(int*)malloc(sizeof(int)*len);
for(i=0;i<len;i++) a[i]=p[i]+1;
for(i=0;i<len;i++) b[i]=a[a[i]-1];
for(i=0;i<len;i++){
if(b[i]!=i+1){
free(a);free(b);return 0;
}
}
free(a);free(b);
return 1;
}
void per_invo(int len){
int *a,*p,*c;
int i,j,k,flg;
int cc;
if(len<1){
printf("error: len<1\n");return;
}
a=(int*)malloc(sizeof(int)*len);
p=(int*)malloc(sizeof(int)*len);
c=(int*)malloc(sizeof(int)*len);
memset(p,0,sizeof(int)*len);
memset(c,0,sizeof(int)*len);
for(i=0;i<len;i++) a[i]=i+1;
k=0;flg=1;cc=0;
while(flg){
for(p[k]=0;p[k]<len;p[k]++){
for(i=0;i<k;i++){
if(p[i]==p[k]) break;
}
if(i!=k) continue;
c[k]++;
if(k==len-1){
if(check_invo(p,len)){
cc++;
printf("No: %d\t(",cc);
for(i=0;i<len-1;i++) printf("%d, ",a[p[i]]);
printf("%d)\n",a[p[i]]);
}
for(i=len-1,j=1;c[i]==j&&i>=0;i--,j++);
if(j==len+1){
flg=0;break;
}
k=i;
if(k<len-1){
memset(c+k+1,0,sizeof(int)*(len-k-1));
}
}
else k++;
}
}
free(p);free(c);free(a);
}
int main(){
per_invo(4);
return 0;
}
No: 1 (1, 2, 3, 4)
No: 2 (1, 2, 4, 3)
No: 3 (1, 3, 2, 4)
No: 4 (1, 4, 3, 2)
No: 5 (2, 1, 4, 3)
No: 6 (2, 1, 3, 4)
No: 7 (3, 2, 1, 4)
No: 8 (3, 4, 1, 2)
No: 9 (4, 2, 3, 1)
No: 10 (4, 3, 2, 1)
Press any key to continue