C,
pasted
on Nov 9:
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void func( int n, char* s, int* f, char* w )
{
int i, j;
for( i = 0; i < n; i++ )
if( w[i] == ' ' ) break;
if( i == n ) {
for( i = 0; i < n; i++ )
putchar( w[i] );
putchar( ',' );
return;
}
j = i;
for( i = 0; i < n; i++ ) {
if( f[i] ) {
w[j] = s[i];
f[i] = 0;
func( n, s, f, w );
w[j] = ' ';
f[i] = 1;
}
}
}
void permute( char* s )
{
char* w;
int* f;
int n, i;
n = strlen( s );
f = (int*)malloc( n * sizeof( int ) );
w = (char*)malloc( n );
if( !w || !f ) exit( 0 );
for( i = 0; i < n; i++ ) {
w[i] = ' ';
f[i] = 1;
}
func( n, s, f, w );
free( (void*)w );
free( (void*)f );
}
int main( void )
{
char* s = "ABCD";
permute( s );
putchar( '\n' );
return 0;
}
|
Output:
|
ABCD,ABDC,ACBD,ACDB,ADBC,ADCB,BACD,BADC,BCAD,BCDA,BDAC,BDCA,CABD,CADB,CBAD,CBDA,CDAB,CDBA,DABC,DACB,DBAC,DBCA,DCAB,DCBA,
|
|