import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class FullSort { private static int NUM = 3;
private static void sort(List datas, List target) { if (target.size() == NUM) { for (Object obj : target) System.out.print(obj); System.out.println(); return; } for (int i = 0; i < datas.size(); i++) { List newDatas = new ArrayList(datas); List newTarget = new ArrayList(target); newTarget.add(newDatas.get(i)); newDatas.remove(i); sort(newDatas, newTarget); } }
public static void main(String[] args) { String[] datas = new String[] { "0", "0", "1" }; sort(Arrays.asList(datas), new ArrayList()); }
package boke;/** * 回溯法 * * @since jdk1.6 * @author 毛正吉 * @version 1.0 * @date 2010.05.25 * */ public class NAllArrangement { private int count = 0; // 解数量 private int n; // 输入数据n private int[] a; // 解向量 private int[] d; // 解状态 /** * @param args */ public static void main(String[] args) { //测试例子 NAllArrangement na = new NAllArrangement(5, 100); na.tryArrangement(1); } public NAllArrangement(int _n, int maxNSize) { n = _n; a = new int[maxNSize]; d = new int[maxNSize]; } /** * 处理方法 * * @param k */ public void tryArrangement(int k) { for (int j = 1; j <= n; j++) { // 搜索解空间 if (d[j] == 0) { a[k] = j; d[j] = 1; } else { // 表明j已用过 continue; } if (k < n) { // 没搜索到底 tryArrangement(k + 1); } else { count++; output(); // 输出解向量 } d[a[k]] = 0; // 回溯 } } /** * 输出解向量 */ private void output() { System.out.println("count = " + count); for (int j = 1; j <= n; j++) { System.out.print(a[j] + " "); } System.out.println(""); }}
#1楼 得分:0回复于:2011-01-13 12:35:52Java codeimport java.util.ArrayList; import java.util.Arrays; import java.util.List; public class FullSort { private static int NUM = 3;
private static void sort(List datas, List target) { if (target.size() == NUM) { for (Object obj : target) System.out.print(obj); System.out.println(); return; } for (int i = 0; i < datas.size(); i++) { List newDatas = new ArrayList(datas); List newTarget = new ArrayList(target); newTarget.add(newDatas.get(i)); newDatas.remove(i); sort(newDatas, newTarget); } }
public static void main(String[] args) { String[] datas = new String[] { "0", "0", "1" }; sort(Arrays.asList(datas), new ArrayList()); }
}
呵呵 ,我已经找到解决方案了。。000-111 转换成10进制也就是0-8 for(int i=0;i<8;i++){ String sjin = Integer.toBinaryString(i); if (sjin.length() != 3 && sjin.length() < 3) { int b = 3 - sjin.length(); for (int w = 0; w < b; w++) { bf.append("0"); } sjin = bf.toString() + sjin; System.out.println(sjin); bf.delete(0, bf.length()); } }
模拟进制的方式int[] a = new int[3]; Arrays.fill(a, 0); while (true) { if (a[0] == 2) {break;} for (int i=0; i<a.length; i++) { System.out.print(a[i]); } System.out.println(); for (int i=a.length-1; i>=0; i--) { a[i]++; if (a[i] == 2) { //进位 if (i==0) {break;} a[i] = 0; } else { break; } } }
import java.util.Arrays;
import java.util.List;
public class FullSort {
private static int NUM = 3;
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "0", "0", "1" };
sort(Arrays.asList(datas), new ArrayList());
}
}
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
printf("%d%d%d\n",i,j,k);
* 回溯法
*
* @since jdk1.6
* @author 毛正吉
* @version 1.0
* @date 2010.05.25
*
*/
public class NAllArrangement {
private int count = 0; // 解数量
private int n; // 输入数据n
private int[] a; // 解向量
private int[] d; // 解状态 /**
* @param args
*/
public static void main(String[] args) {
//测试例子
NAllArrangement na = new NAllArrangement(5, 100);
na.tryArrangement(1); } public NAllArrangement(int _n, int maxNSize) {
n = _n;
a = new int[maxNSize];
d = new int[maxNSize];
} /**
* 处理方法
*
* @param k
*/
public void tryArrangement(int k) {
for (int j = 1; j <= n; j++) { // 搜索解空间
if (d[j] == 0) {
a[k] = j;
d[j] = 1;
} else { // 表明j已用过
continue;
} if (k < n) { // 没搜索到底
tryArrangement(k + 1);
} else {
count++;
output(); // 输出解向量
}
d[a[k]] = 0; // 回溯
}
} /**
* 输出解向量
*/
private void output() {
System.out.println("count = " + count);
for (int j = 1; j <= n; j++) {
System.out.print(a[j] + " ");
}
System.out.println("");
}}
import java.util.Arrays;
import java.util.List;
public class FullSort {
private static int NUM = 3;
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "0", "0", "1" };
sort(Arrays.asList(datas), new ArrayList());
}
}
for(int i=0;i<8;i++){
String sjin = Integer.toBinaryString(i);
if (sjin.length() != 3 && sjin.length() < 3) {
int b = 3 - sjin.length();
for (int w = 0; w < b; w++) {
bf.append("0");
}
sjin = bf.toString() + sjin;
System.out.println(sjin);
bf.delete(0, bf.length());
}
}
Arrays.fill(a, 0);
while (true) {
if (a[0] == 2) {break;}
for (int i=0; i<a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
for (int i=a.length-1; i>=0; i--) {
a[i]++;
if (a[i] == 2) { //进位
if (i==0) {break;}
a[i] = 0;
} else {
break;
}
}
}