全置換算法:
如果我在固定第壹個位置後找到排列,那麽所有的排列都可以找到。固定第壹個位置有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設置為未使用。
}
}