全排列

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,然后又继续向下搜索。。。

keep moving...
原文地址:https://www.cnblogs.com/xxx0624/p/3015397.html