zoukankan      html  css  js  c++  java
  • 全排列

    #include "stdio.h"
    
    #define swap(arr, i , j)
    {
    	if ((i) != (j)) {
    	int temp;
    	temp = arr[i]; 
    	arr[i] = arr[j]; 
    	arr[j] = temp;
    	}
    }
    
    void print_array(int *arr, int len)
    {
    	int i;
    	printf("
    ");
    	for(i  =0; i < len; i++) {
    		printf("%d ", arr[i]);
    	}
    }
    
    int permutation(int *arr, int pos, int n)
    {
    	int i;
    
    	if (pos == n) { //递归结束条件
    		print_array(arr, n);
    		return 0;
    	}
    
    	for(i = pos; i < n; i++) 
    	{  
    		swap(arr, i, pos);//某个数字交换到 pos 位置
    		permutation(arr, pos + 1, n); //对出pos 位置后面的数,进行一次全排列
    		swap(arr, i, pos);//复原原来的排列,准备交换下一个数到pos 位置。  
    	}
    	return 0;
    }
    
    int main(int argc, char *argv[])
    {
    	int n = 0;
    	int i;
    	int number[20]; //已经有2432902008176640000 种排列方法了,输出来也很难保存这样多的数据了,所以程序不能大于这个数字。
    
    	printf("input n: ");
    	while (scanf("%d", &n)) {
    		if (n < 1) {
    			printf("n must big than zero. 
    ");
    			continue;
    		}
    		if (n > 20) {
    			printf("n too big. 
    ");
    			continue;
    		}
    		for (i = 0; i < n; i++) {
    			number[i] = i + 1;
    		}
    		permutation(number, 0, n);
    		printf("
    
    input n: ");
    	}
    	return 0;
    }

    来至http://www.cnblogs.com/niniwzw/archive/2010/03/19/1689863.html
  • 相关阅读:
    爱信诺面试总结
    项目进展日志6
    项目进展日志5
    项目进展日志4
    项目进展日志3
    项目进展日志2
    项目阶段总结
    项目进展日志
    事物的ACID特性
    5.27作业
  • 原文地址:https://www.cnblogs.com/byfei/p/6389888.html
Copyright © 2011-2022 走看看