• 全排列


    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...
  • 相关阅读:
    Redis基础
    Windows 10 中 安装 RabbitMQ
    Nginx
    第二章-矩阵
    第一章-行列式
    第六章-微分方程
    第五章-多元函数
    第四章-定积分
    第三章-不定积分
    第二章-导数
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3015397.html
Copyright © 2020-2023  润新知