不带重复的(List)
import java.util.*; public class Quanpailiedfs { public static List<ArrayList> res=new ArrayList<>(); public static List temp=new ArrayList<Integer>(); public static void main(String args[]){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int visit[]=new int[n]; for(int i=0;i<n;i++){ visit[i]=0; } dfs(visit); for(int i=0;i<res.size();i++){ System.out.println(res.get(i)); } } public static void dfs(int visit[]){ if(temp.size()==visit.length){ res.add(new ArrayList<List>(temp)); }else{ for(int i=0;i<visit.length;i++){ if(visit[i]==0){ visit[i]=1; temp.add(i+1); dfs(visit); visit[i]=0; temp.remove(temp.size()-1); } } } } }
带重复的去重复(Set)
import java.util.*; public class Quanpailieset { public static char ch[]=new char[]{'a','b','a','c','c','e','e','d'}; public static Set<ArrayList> res=new HashSet<>(); public static ArrayList temp=new ArrayList<Character>(); public static void main(String args[]){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int visit[]=new int[n]; for(int i=0;i<n;i++){ visit[i]=0; } dfs(visit); for(List set:res){ System.out.println(set); } } public static void dfs(int visit[]){ if(temp.size()==visit.length){ res.add(new ArrayList<List>(temp)); }else{ for(int i=0;i<visit.length;i++){ if(visit[i]==0){ visit[i]=1; temp.add(ch[i]); dfs(visit); visit[i]=0; temp.remove(temp.size()-1); } } } } }