要求是:有n个点,证明是否有n-1个组合符合我们的要求。为了简化我就记做有8个点(1,2,3,4,5,6,7,8),一一对应相连,形成(1,2)(3,4)(5,6)(7,8)或(1,5)(2,6)(3,8)(4,7)等等,这里(1,2)和(2,1)是相同的。然后相互比较,把(1,2)(3,4)(5,6)(7,8)作为基准。比较的办法是这样的,比如:a:(1,2)(3,4)(5,6)(7,8) b:(1,5)(2,6)(3,8)(4,7).从a组开始,a组的1是和2相连的,得到2,然后根据2找到在b组中相连得数是6,再回到a组中找到和6相连得数是5,在b组中和5相连的是1,回到了起点数,可是还有其他3,4啥的还没有访问到,就说明b数组不符合要求。符合要求的是最后把所有的数都访问一遍,不能有重复的,最后回到起始的点。要找到n-1个这样的数据。大家能给个啥好的建议思路吗?效率问题是个大麻烦。
我这里还有个先期写的穷举法写的列出所有这样组合的代码,是用eclipse的,可是当n大于6的时候,他只有列出10组组合,不知道问题出在那里,我上传一下,请大家帮我看看啊,先谢谢了
import java.util.ArrayList; 
import java.util.Random; 
public class Aleatoire { 
private int num; 
private int numOfList; 
private ArrayList<String> listOfBinary = new ArrayList<String>(); 
private Random gen = new Random(); 
// 
public Aleatoire(int number){ 
this.num = number; 
int numberOfBinary = fac(num)/(fac(num-2)*2); 
this.numOfList = numberOfBinary/(num/2)*2; 
System.out.println(numOfList); 
ArrayList[] lists = new ArrayList[numOfList]; 
for (int i=0;i<numOfList;i++){ 
lists[i] = new ArrayList(); 
lists[i] = takeList(listOfBinary); 
System.out.println(lists[i]); 


// 
private int fac(int number){ 
if (number == 0 || number == 1) return 1; 
else return number*fac(number-1); 

// 
private ArrayList takeList(ArrayList<String> listOfBinary){ 
ArrayList test = new ArrayList(); 
ArrayList<Integer> temporary = new ArrayList<Integer>(); 
for (int i=0;i<(num/2);i++){ 
int a = gen.nextInt(num); 
while (temporary.contains(new Integer(a))) 
a = gen.nextInt(num); 
temporary.add(new Integer(a)); 
int b = gen.nextInt(num); 
while (temporary.contains(new Integer(b))) 
b = gen.nextInt(num); 
temporary.add(new Integer(b)); 
String banary = "("+(a+1)+","+(b+1)+")"; 
while (listOfBinary.contains(banary)){ 
temporary.remove(new Integer(a)); 
temporary.remove(new Integer(b)); 
a = gen.nextInt(num); 
while (temporary.contains(a)) 
a = gen.nextInt(num); 
temporary.add(a); 
b = gen.nextInt(num); 
while (temporary.contains(b)) 
b = gen.nextInt(num); 
temporary.add(b); 
banary = "("+(a+1)+","+(b+1)+")"; 

test.add(banary); 
listOfBinary.add(banary); 

return test; 
} public static void main(String[] args) { 
Aleatoire a = new Aleatoire(4);