|
[ 簡単な説明 ]
順列生成ルーチンの使用例です。 出力結果は、 test1 3 と実行した結果です。showperm ルーチンは単に順列配列 p[ ] の内容を表示するだけです。 |
/* test1.c 順列生成テスト */
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
long count;
int flag;
void showperm(int p[], int n);
void showperm(int p[], int n)
{
int i, *q;
count++;
if(flag == 0)
{
for(i = 0, q = p; i < n; i++) printf("%d ", *q++);
putchar('\n');
}
}
int main(int argc, char *argv[])
{
clock_t start, Time;
int *p, n;
if(argc < 2)
{
fprintf(stderr, "Usage : %s N < flag >\n", argv[0]);
fprintf(stderr, " function : 順列\n");
fprintf(stderr, " flag : time check mode (any char.)\n");
exit(0);
}
n = atoi(argv[1]);
if(n < 2)
{
fprintf(stderr, "Error : illegal parameter input.\n");
exit(-1);
}
flag = (argc >= 3);
p = (int *)malloc(n * sizeof(int));
if(p == NULL)
{
fprintf(stderr, "Error : out of memory.\n");
exit(-1);
}
count = 0;
start = clock();
genperm1(p, n);
Time = clock() - start;
printf("genperm1 : %d ! = %ld", n, count);
if(flag) printf("( %f [sec] )", (double)Time / CLK_TCK);
putchar('\n');
count = 0;
start = clock();
genperm2(p, n);
Time = clock() - start;
printf("genperm2 : %d ! = %ld", n, count);
if(flag) printf("( %f [sec] )", (double)Time / CLK_TCK);
putchar('\n');
return 1;
}
|
1 2 3 2 1 3 3 1 2 1 3 2 2 3 1 3 2 1 genperm1 : 3 ! = 6 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 genperm2 : 3 ! = 6 |