无方向完全图路径(java)


例如输入3,生成A,B,C,进行函数处理后,最后生成:ACBA,BCAB,CBAC.
求各位大大多多指教,进行算法优化,我虚心接受批评,菜鸟敬上。
<!-- lang: java -->
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Map_ABC {
    static ArrayList list=new ArrayList();
    static char Str[] = null;
    static int num;
    public static int number(){//返回输入图节点数
        int num = 0;
        try{
            BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
            String sb=in.readLine();
            num = Integer.valueOf(sb).intValue();
        }catch(Exception exc){
            System.out.println("输入不合法。");
        }
        return num;
    }
    public static void loop(int n,String s){//循环算法
        if(n==0){
            list.add(s+s.substring(0,1));
            return ;
        }
        for(int i=0;i<num;i++){
            if(s.indexOf(String.valueOf(Str[i]))==-1){
                loop(n-1,s+Str[i]);
            }
        }
    }
    public static void main(String args[]){
        num=number();
        Str=new char[num];
        for(int i=0;i<num;i++){
            Str[i]=(char)(i+65);
        }

        for(int i=0;i<num;i++){
            loop(num-1,""+Str[i]);
        }
        System.out.println("完全图所有路径如下:");
        for(int i = 0;i < list.size(); i ++){
            System.out.println(list.get(i));
        }
        System.out.println("完全图不重复的路径如下:");
        for(int i =list.size()-1;i >=0; i --){
            String strReverse=new StringBuffer(""+list.get(i)).reverse().toString();
            for(int j =i;j >=0; j --){
                if(list.get(j).equals(strReverse)==true)
                    list.remove(j);
            }
        }
        for(int i = 0;i < list.size(); i ++){
            System.out.println(list.get(i));
        }
    }
}

你可能感兴趣的:(无方向完全图路径(java))