View Code
1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 105; 4 int vis[ maxn ]; 5 int a[ maxn ]; 6 int b[ maxn ]; 7 8 void dfs( int s,int t,int pos ){ 9 if( pos==t ){ 10 for( int i=0;i<t;i++ ) 11 printf("%d ",b[ i ]); 12 printf("\n"); 13 return ; 14 } 15 for( int i=0;i<t;i++ ){ 16 if( vis[ i ]==0 ){ 17 vis[ i ] = 1; 18 b[ pos ] = a[ i ]; 19 dfs( s,t,pos+1 ); 20 vis[ i ] = 0; 21 //b[ pos ] = -1; 22 } 23 } 24 } 25 26 int main(){ 27 for( int i=0;i<4;i++ ) 28 a[ i ] = i+1,vis[ i ]==0;//,b[ i ] = -1 ; 29 dfs( 0,4,0 ); 30 return 0; 31 }
对于当前的给定的一个序列a,把输出的各种排列放在b中。
首先定义一个数组vis记录该位置上的数是否放在了b中的某个位置上。
当b中放满了数据 之后 ,在dfs返回 即vis重新置为0,然后又继续向下搜索。。。