順列を出力

a,b,c,dの4文字でできる文字列すべての順列を列挙するプログラムをかいてみました

// a,b,c,dからできる文字列の組み合わせを列挙する
#include <stdio.h>

#define N (4)
const char chars[N] = {'a', 'b', 'c', 'd'};
int visit[N];
char out[N+1];

void search(int pos, int index, int maxindex)
{
  int i; // just for count

  visit[pos] = 1;
  if (index == maxindex){
    out[index] = chars[pos];
    out[index+1] = '\0';
    printf("%s\n", out);
    
    visit[pos] = 0; // roll back
    return;
  }
  for (i = 0; i < N; i++)
    if (!visit[i]){
      out[index] = chars[pos];
      search(i, index+1, maxindex);
    }
  visit[pos] = 0; // roll back
  return;
}

int main()
{
  int i, j; // just for count

  for (i = 1; i <= N; i++) // 1個からN個に掛けて
    for (j = 0; j < N; j++) // 全ての場所から
      search(j, 0, i-1); // 探索
  return 0;
}