全排列-遞迴(不含去重複的操作)非DFS
阿新 • • 發佈:2018-11-09
import java.util.*; public class Quanpaifeidigui { public static void main(String args[]){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); int num[]=new int[n]; for(int i=0;i<n;i++){ num[i]=in.nextInt(); } Pailie(num,0); //全排列 } } public static void Pailie(int num[],int k){ if(k==num.length-1){ Print(num); }else{ for(int i=k;i<num.length;i++){ //先保持不變,遞迴的棧的特點是最後開闢的棧先執行完畢,因此該遞迴執行的出的全排列具有一定順序 Swap(i,k,num); Pailie(num,k+1); Swap(i,k,num); } } } //交換函式 public static void Swap(int x,int y,int num[]){ int temp=num[x]; num[x]=num[y]; num[y]=temp; } //列印結果 public static void Print(int num[]){ for(int i=0;i<num.length;i++){ if(i==0){ System.out.print(num[i]); }else{ System.out.print(" "+num[i]); } } System.out.println(); } }