需求:
* 用 1,2 , 2 ,3, 4 ,5 这 6 个数字, 用 Java 写一个 main 函数, 打印出所有不同的排列, 如:
* 512234, 212345 等, 要求: “4”不能在第三位, “3”与”5”不能相连
代码
package test;
import java.util.Iterator;
import java.util.TreeSet;
/**
* 用 1,2 , 2 ,3, 4 ,5 这 6 个数字, 用 Java 写一个 main 函数, 打印出所有不同的排列, 如:
* 512234, 212345 等, 要求: “4”不能在第三位, “3”与”5”不能相连
* @author Administrator
*
*/
public class numberRandom {
String[] stra = {"1","2","2","3","4","5"};
int n = stra.length;
boolean[] visited = new boolean[n];
String result = "";
TreeSet<String> ts = new TreeSet<String>();
int[][] a = new int[n][n];
private void searchMap() {
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;
}
}
}
//3 和 5 不能相连
a[3][5]=0;
a[5][3]=0;
for(int i=0;i<n;i++) {
search(i);
}
Iterator<String> it = ts.iterator();
while(it.hasNext()) {
String str =it.next();
if(str.indexOf("4")!=2){
System.out.println(str);
}
}
}
private void search(int startIndex){
visited[startIndex] = true;
result = result + stra[startIndex];
if(result.length() ==n){
ts.add(result);
}
for(int j=0;j<n;j++){
if(a[startIndex][j]==1&&visited[j]==false){
search(j);
}else{
continue;
}
}
result = result.substring(0,result.length()-1);
visited[startIndex] = false;
}
public static void main(String[] args){
new numberRandom().searchMap();
}
}