码迷,mamicode.com
首页 > 其他好文 > 详细

全排列 最详细的解题报告

时间:2014-10-23 12:03:51      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   ar   java   for   sp   数据   

题目大意:求任意集合的全排列

解题思路:假设数据存放在数组array[0,1...,length-1]中,首先固定下标为first=0的数,计算array[1,...,length-1]的全排列,依次类推,当first==length-1是,输出数组中的数据。当计算完array[1,...,length-1]的全排列后(此时first=0),然后需要将下标为1,...,length-1的所有数与first进行交换,即array中的每一个数都要放在first=0的位置,然后再依次类推。

 

具体算法(java版)

 1 //将array数组中下标为m和n的数据进行交换
 2     public static void swap(int[] array, int m, int n) {
 3         int x = array[m];
 4         array[m] = array[n];
 5         array[n] = x;
 6     }
 7 
 8     //输出array数组中的数据
 9     public static void output(int[] array) {
10         for (int i = 0; i < array.length; i++) {
11             System.out.print(array[i] + "\t");
12         }
13         System.out.println();
14     }
15 
16     public static void permutation(int[] array, int first) {
17         if (first == array.length - 1) {// first已经到最后一个元素了,即所有的元素都已经固定了
18             output(array); 
19         } else {
20             for (int i = first; i < array.length; i++) {
21                 swap(array, i, first); //交换
22                 permutation(array, first + 1); //first以前的元素都固定了,接下来固定first+1
23                 swap(array, i, first); //还原
24             }
25         }
26     }
27 
28     public static void main(String[] args) {
29         int[] array = { 1, 2, 3 }; // 待排列的元素
30         permutation(array, 0);
31     }

 

全排列 最详细的解题报告

标签:style   blog   color   io   ar   java   for   sp   数据   

原文地址:http://www.cnblogs.com/pinxiong/p/4045379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!