當前位置:成語大全網 - 書法字典 - Java數組的全排列,其中布爾數組vis[]在遞歸算法中起作用,遞歸塊看不懂,求詳細解答。

Java數組的全排列,其中布爾數組vis[]在遞歸算法中起作用,遞歸塊看不懂,求詳細解答。

不要急著看代碼,要從心理上了解思路的整體安排,不重視思路是很多程序員的通病。

全置換算法:

如果我在固定第壹個位置後找到排列,那麽所有的排列都可以找到。固定第壹個位置有10種可能,可以循環獲得。

如果我在固定第二個位置後找到排列,我可以在固定第壹個位置後找到排列。固定第二個位置有九種可能,可以循環獲得。

。。。

如果我在固定10位後找到排列,就可以找到固定第9位後的排列,固定10位有1種可能,可以循環得到。

這顯然是壹個遞歸算法。

靜態void DFS (int start,int end,int num){//是所有排列的集合,其中start是數字的位置,end是最後壹位,num是冗余的。

If(start==end){//當當前數位位置是最後壹位時,表示已經生成了壹個序列。

for(int I = 1;我& lt結束;i++)

system . out . print(a[I]+" ");//輸出序列

system . out . println();

}

當不生成else{//序列時。

for(int I = 1;我& lt結束;i++){

if(vis[I])//我以前被用過?

繼續;//如果直接跳過。

a[start]= I;//確定起始位置的編號。當起點為1時,確定第壹個位置。有10種可能。

vis[I]= true;//設置I為已用狀態,防止下壹位使用I。

dfs(start+1,end,num);//確定起始位後,查找所有序列。

vis[I]= false;//將I設置為未使用。

}

}