順列生成ルーチン 使用例



[ 簡単な説明 ]

順列生成ルーチンの使用例です。
出力結果は、

          test1   3

と実行した結果です。showperm ルーチンは単に順列配列 p[ ] の内容を表示するだけです。

プログラム・ソース("test1.c")           top (先頭に戻る)
/*		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;
}

出力結果           top (先頭に戻る)
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