package wordcount.n个数分m组;
import java.util.ArrayList;
import java.util.List;
public class FenMain {
static int[] arr;
static int[] vis;
static int n=6;
static int m=3;
public static void main(String[] args) {
arr = new int[n];
for (int i = 0; i < n; ++i) {
arr[i] = i;
}
List<Integer>[] lists = new List[m];
for (int i = 0; i < m; ++i) {
lists[i] = new ArrayList<>();
}
vis = new int[n];
dfs(lists,0 ,0 );
}
public static void dfs(List<Integer>[] lists, int currM,int count) {
if(count==arr.length) {
if(currM==m){
System.out.println("============");
for(int i=0;i<lists.length;++i){
for(Integer x:lists[i]){
System.out.print(arr[x]+",");
}
System.out.println();
}
}
}
if(currM>=m) return;
if (lists[currM].size() == 0) {
Integer firstIndex = getFirstIndex(vis);
if(firstIndex==null) return;
vis[firstIndex] = 1;
lists[currM].add(firstIndex);
dfs(lists, currM,count+1);
if(currM<=m) {
dfs(lists, currM + 1, count + 1);
}
lists[currM].remove(lists[currM].size() - 1);
vis[firstIndex] = 0;
} else {
for(int i=lists[currM].get(lists[currM].size() - 1) + 1;i<n;++i){
if(vis[i]==0) {
vis[i] = 1;
lists[currM].add(i);
dfs(lists, currM, count + 1);
if (currM <= m) {
dfs(lists, currM + 1, count + 1);
}
lists[currM].remove(lists[currM].size() - 1);
vis[i] = 0;
}
}
}
}
private static Integer getFirstIndex(int[] vis) {
for (int i = 0; i < vis.length; ++i) {
if (vis[i] == 0) {
return i;
}
}
return null;
}
private static Integer getFirstIndex(int[] vis, int start) {
for (int i = start; i < vis.length; ++i) {
if (vis[i] == 0) {
return i;
}
}
return null;
}
}
n个数分m组
最新推荐文章于 2022-12-28 05:30:00 发布