算法——全排列問題

問題

求n個元素的全排列。
eg:

  • 輸入:a b c
  • 輸出:abc acb bac bca cab cba

思路

將這n個元素看做一個數組,我們用一個數值k(從0開始)來代表某個元素的位置索引,那麼讓數組中每一個元素與k進行一次交換,然後將k加1繼續調用遞歸,最後回溯(將交換位置後的數組還原)。

實現代碼

package suanfa;
//k:當前的交換位置
//讓k後面的每個元素與k交換
public class AllList {
	public static void f(char[] data,int k)
	{
		if(k==data.length-1)
		{
			for(int i=0;i<data.length;i++)
			{
				System.out.print(data[i]+" ");
			}
			System.out.println();
		}
		for(int i=k;i<data.length;i++)
		{
			{//試探
				char t=data[k];
				data[k]=data[i];
				data[i]=t;
			}
			f(data,k+1);
			{//回溯
				char t=data[k];
				data[k]=data[i];
				data[i]=t;
			}
		}
	}
	public static void main(String[] args) {
		char[] data="ABCDE".toCharArray();
		f(data,0);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章