n个数的全排列C语言递归 (回溯)back-tracking

  • Post author:
  • Post category:其他
#include <stdio.h>
#include <string.h>
int n, a[100];
int used[100];
int num[100];
void dfs( int x )
{
	int i;
	if( x >= n )
	{
		for( i = 0; i < n; i++ )
			printf( "%d ", num[i] );
		printf( "\n" );
	}
	else
	{
		for( i = 0; i < n; i++ )
			if( !used[i] )
			{
				num[x] = a[i];
				used[i] = 1;
				dfs( x+1 );
				used[i] = 0;
			}
	}
	return ;
}
int main()
{
	int i;
	memset( used, 0, sizeof(used) );
	printf( "此程序为递归进行n个整数的全排列(n<100),");
	printf( "一共有多少个数?\n");
	scanf( "%d", &n );
	for( i = 0; i < n; i++ )
	{
		printf( "第%d个:" );
		scanf( "%d", &a[i] );
	}
	dfs( 0 );
	return 0;
}

版权声明:本文为sambrown123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。