算法程序题:    题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。  基本思路:
1 把问题归结为图结构的遍历问题。实际上6个数字就是六个结点,把六个结点连接成无向连通图,对于每一个结点求这个图形的遍历路径,所有结点的遍历路径就是最后对这6个数字的排列组合结果集。
2 显然这个结果集还未达到题目的要求。从以下几个方面考虑:
  1. 3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
  2. 不能有重复: 考虑到有两个2,明显会存在重复结果,可以把结果集放在TreeSet中过滤重复结果
  3. 4不能在第三位: 仍旧在结果集中去除满足此条件的结果。
  程序:
package zhj.Usual_Test;import java.util.Iterator;
import java.util.TreeSet;class TestQuestion { private String[] b = new String[] { "1", "2", "2", "3", "4", "5" };
private int n = b.length;
private boolean[] visited = new boolean[n];
private int[][] a = new int[n][n];
private String result = "";
private TreeSet TreeSet = new TreeSet(); public static void main(String[] args) {
new TestQuestion().start();
} private void start() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j) {
a[i][j] = 0;
} else {
a[i][j] = 1;
}
}
}
a[3][5] = 0;
a[5][3] = 0;
for (int i = 0; i < n; i++) {
this.depthFirstSearch(i);
}
TreeSet set = null;
Iterator it = set.iterator();
while (it.hasNext()) {
String string = (String) it.next();
if (string.indexOf("4") != 2) {
System.out.println(string);
}
}
} private void depthFirstSearch(int startIndex) {
visited[startIndex] = true;
result = result + b[startIndex];
if (result.length() == n) {
TreeSet.add(result);
}
for (int j = 0; j < n; j++) {
if (a[startIndex][j] == 1 && visited[j] == false) {
depthFirstSearch(j);
} else {
continue;
}
}
result = result.substring(0, result.length() - 1);
visited[startIndex] = false;
}
}运行时找不到TestQuestion类,谢谢帮助。

解决方案 »

  1.   

    看到你的问题头都大了`````````````用CSDN里面提供的原代码插入程序``````这样方便看撒`
      

  2.   

    哦,下次注意点。你可以直接复制到eclipse下或者什么编译器下看
      

  3.   

    代码没有大问题,只有一个地方需要修改
    //    TreeSet set = null;
        Iterator it = TreeSet.iterator();不能运行,你是怎么运行的?在 Eclipse 里面吗?如果在命令行 cmd ,你需要使用java -cp . zhj.Usual_Test.TestQuestion 来运行,确认你的当前目录在 zhj 的上一级哦
      

  4.   

    class TestQuestion 
    改成public class TestQuestion  试试,其他没仔细看
      

  5.   

    我在eclipse和dos里都运行过,都没成功
    错误信息:
      

  6.   

    这段程序在Eclipse中可以运行通过。
      

  7.   

    高手啊
    不过还在加上public,一个包中要有一个public class才可以编译,运行的
      

  8.   

    还有个问题想问你,
    TreeSet set = null;
    Iterator it = set.iterator();

    Iterator it = TreeSet.iterator();
    有什么区别吗?为什么上面的运行不了呢,渴望得到你的解答