C言語なら俺に聞け! Part 119

このエントリーをはてなブックマークに追加
874デフォルトの名無しさん
>>870
#include <stdio.h>
#include <stdlib.h>

void swap(int *p, int *q)
{
int t = *p;
*p = *q;
*q = t;
}

int next_perm(int *n, int s)
{
int i = s, j = s, k;
while(--i > 0 && n[i - 1] >= n[i]){}
if(i <= 0) return 0;
for(k = i; i < --j; i++) swap(&n[i], &n[j]);
for(i = k; n[i] <= n[k - 1]; i++){}
swap(&n[k - 1], &n[i]);
return 1;
}
875デフォルトの名無しさん:2006/01/07(土) 17:49:02
int main(int ac, char **av)
{
int s, i, *n;
if(ac != 2){
fprintf(stderr, "Usage: perm N\n");
return 1;
}
if(!(s = atoi(av[1]))){
fprintf(stderr, "Error: N = %d\n", s);
return 1;
}
if(!(n = malloc(s * sizeof(int)))){
fprintf(stderr, "Error: no memory\n");
return 1;
}
for(i = 0; i < s; i++) n[i] = i;
do{
for(i = 0; i < s; i++) fprintf(stdout, "%d ", n[i] + 1);
fprintf(stdout, "\n");
}while(next_perm(n, s));
free(n);
return 0;
}