1. 程式人生 > >深度優先演算法實現字母全排列(Java)

深度優先演算法實現字母全排列(Java)

使用Java實現對任意字母的全排列,例如:
在字母ABC中排列出全部答案。使用一般的for迴圈方法也可以解出題目,這裡面就ABC三個字母,使用for迴圈的話也只不過三個迴圈巢狀罷了,如果是ABCDEFGHI呢?用9個for迴圈算出結果麼,甚至更多,這樣字母一多下來使用for迴圈就會讓程式很執行起來笨重,時間複雜度和空間複雜度都會很大,寫起來也不方便,所以下面我將採用深度優先演算法(dfs)在解決此問題,那就方便多了,而且不管有多少字母都會很快。
(部落格專欄或者主頁中有對深度優先演算法的詳細介紹和理解以及其他很多深度優先演算法的體型)
核心程式碼如下:

public class Main {

    //n表示的是定義全排列的位數,可以根據題目意思和實際情況自行輸入自行定義    
public static int n=3; public static char a[]=new char[4]; //儲存結果的陣列的大小 public static int book[]=new int[95]; //大寫字母的ASCII碼值在65-91 public static void main(String[] args) { dfs(1); } private static void dfs(int temp) { if(temp==n+1) { System.out
.printf("%c%c%c \n",a[1],a[2],a[3]); return; } for(int i='A';i<='C';i++) //也可以使用ASCII碼在做i的取值範圍 { if(book[i]==0) { a[temp]=(char)i; book[i]=1; dfs(temp+1); book[i]=0; } } return
; } }

執行結果:
ABC
ACB
BAC
BCA
CAB
CBA