国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - JAVA用遞歸實現全排列算法的示例代碼

JAVA用遞歸實現全排列算法的示例代碼

2020-07-04 11:41心拍數#0822 JAVA教程

這篇文章主要介紹了JAVA用遞歸實現全排列算法的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下

求一個n階行列式,一個比較簡單的方法就是使用全排列的方法,那么簡述以下全排列算法的遞歸實現。

首先舉一個簡單的例子說明算法的原理,既然是遞歸,首先說明一下出口條件。以[1, 2]為例

首先展示一下主要代碼(完整代碼在后面),然后簡述

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//對數組array從索引為start到最后的元素進行全排列  public void perm(int[]array,int start) {
    if(start==array.length) { //出口條件
      for(int i=0;i<array.length;i++) {
//        this.result[row][i] = array[i];
        System.out.print(array[i]+" ");
      }
//      System.out.print(++this.row+": ");
//      System.out.println("逆序數是:"+ this.against(array));
      System.out.print('\n');
    }
    else {
      for(int i=start;i<array.length;i++) {
        swap(array,start,i); //交換數組array中索引為start與i的兩個元素
        perm(array,start+1);
        swap(array,start,i);
      }
    }
  }

首先數組[1, 2]分析,在else的部分

調用了swap(array, 0,0)然后調用perm(array, 1)

  調用swap(array, 1, 1)然后調用perm(array, 2),然后在if里面2 == 2成立,打印[1, 2]

  調用swap(array, 1,1)把之前交換的swap(array,1,1)復原,雖然看起來沒有變化

回到上一層

調用swap(array, 0, 1) 然后調用perm(array, 1)

  調用swap(array, 1, 1)然后調用perm(array, 2),然后在if里面2 == 2成立,打印[2, 1]

  調用swap(array, 1,1)把之前交換的swap(array,1,1)復原,雖然看起來沒有變化

回到上一層

跳出循環,程序結束。

這就是對[1, 2]的全排列。

那么放到一般情況,[1, 2, 3]呢?

調用了swap(array, 0,0)然后調用perm(array, 1)

  然后對[2, 3]進行全排列,其中輸出[1,2,3], [1, 3, 2]

再次調用swap(array,0,0)復原

調用了swap(array, 0,1)然后調用perm(array, 1)

  然后對[1,3]進行全排列,輸出[2,1,3], [2,3,1]

再次調用swap(array,0,1)復原

調用了swap(array, 0,2)然后調用perm(array, 1)

  然后對[2,1]進行全排列,輸出[3,2,1], [3,1,2]

再次調用swap(array,0,2)復原

更高階的就是同理了!

那么我們的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package matrix;
 
import java.util.Arrays;
 
public class Permutation {
 
  /**
   * author:ZhaoKe
   * college: CUST
   */
  //當前打印的第幾個排列
  private int row = 0;
  //存儲排列的結果
  private int[][] result;
  
  public Permutation(int[] array) {
    this.row = 0;
    this.result = new int[this.factor(array.length)][array.length];
  }
  
  public int[][] getResult() {
    return result;
  }
 
  //求數組a的逆序數
  public int against(int a[]) {
    int nn = 0;
    for (int i = 0; i < a.length-1; i++) {
      for (int j = i+1; j<a.length; j++) {
        if (a[i] > a[j]) {
          nn++;
        }
      }
    }
    return nn;
  }
 
  //排列數
  public int factor(int a) {
    int r = 1;
    for (; a>=1; a--) {
      r *= a;
    }
    return r;
  }
 
  public void perm(int[]array,int start) {
    if(start==array.length) {
      System.out.print((this.row+1)+": ");
      for(int i=0;i<array.length;i++) {
        this.result[row][i] = array[i];
        System.out.print(array[i]+" ");
      }
      this.row++;
      System.out.println("逆序數是:"+ this.against(array));
      System.out.print('\n');
    }
    else {
      for(int i=start;i<array.length;i++) {
        swap(array,start,i);
        perm(array,start+1);
        swap(array,start,i);
      }
    }
  }
  
  public void swap(int[] array,int s,int i) {
    int t=array[s];
    array[s]=array[i];
    array[i]=t;
  }
  
  public void printResult() {
    for (int i = 0; i < result.length; i++) {
        System.out.println(Arrays.toString(this.result[i]));
    }
  }
  
  public static void main(String[] args) {
    int[] a = {1, 2, 3};
    Permutation p = new Permutation(a);
    p.perm(a,0);
    p.printResult();
  }
}

運行該程序結果如下:

1: 1 2 3 逆序數是:0
 
2: 1 3 2 逆序數是:1
 
3: 2 1 3 逆序數是:1
 
4: 2 3 1 逆序數是:2
 
5: 3 2 1 逆序數是:3
 
6: 3 1 2 逆序數是:2
 
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]

以上就是JAVA用遞歸實現全排列算法的示例代碼的詳細內容,更多關于JAVA遞歸實現全排列的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/zhaoke271828/p/12530031.html

延伸 · 閱讀

精彩推薦
523
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 天天澡天天狠天天天做 | 黄色片在线免费观看 | 成人福利网站 | 97久久久 | 老熟女毛片 | 色婷婷精品久久二区二区蜜臂av | 国产高清亚洲 | 中文字幕人成乱码在线观看 | 一级特黄录像免费播放全99 | 成人在线视频观看 | 中文字幕久久久 | 毛片在线免费 | 天天久久| 日韩成人在线一区二区 | 日韩精品视频在线 | 日本大人吃奶视频xxxx | 欧美黄视频在线观看 | 久久精品中文视频 | 精品久久久久久久久久 | 久久婷婷av | 18毛片 | 一区二区三区无码高清视频 | 国产精品a久久久久 | 91久久国产综合久久91精品网站 | 亚洲精品一区二区在线观看 | 精品国产区 | 欧美一区二区三区在线视频 | 久久99国产精一区二区三区 | 在线观看免费av网 | 欧美一区二区三区精品 | 亚洲视频一区在线 | 欧美一区永久视频免费观看 | 中文字幕一区二区三 | 一区日韩| 精品在线一区二区 | 欧洲精品久久久久69精品 | 黄色小视频在线观看 | 特黄特色大片在线观看视频网站 | 日韩不卡一区二区 | 日韩电影免费在线观看 | 亚洲啊v |