全排列问题

来源:互联网 发布:phonewindow源码分析 编辑:程序博客网 时间:2024/05/17 09:16

将一个数组全排列

 

#include <stdio.h> 

int n = 0; 
/*
void swap(int *a, int *b)
{    
    int m;    
    m = *a;    
    *a = *b;    
    *b = m;
}  */
void swap(int &a, int &b)
{    
    int m;    
    m = a;    
    a = b;    
    b = m;
}
void perm(int list[], int k, int m)
{    
    int i;    
    if(k > m)    
    {         
        for(i = 0; i <= m; i++)            
            printf("%d ", list[i]);        
        printf("\n");        
        n++;    
    }    
    else    
    {        
        for(i = k; i <= m; i++)        
        {            
          swap(list[k], list[i]);            
            perm(list, k + 1, m);            
            swap(list[k], list[i]);        
        }    
    }
}
int main()
{    
    int list[] = {1, 2, 3, 4, 5};
    perm(list, 0, 4);    
    printf("total:%d\n", n);    
    return 0;

原创粉丝点击