算法实现筛选出树上符合要求的某一条路径的节点

来源:互联网 发布:js select 编辑:程序博客网 时间:2024/05/16 15:34

有如图所示的关系图,实现筛选出从5、4、3、2、1开始,包含16、17、18、19、21、22、23、24、25、26节点的路径。可以扩展到选择树中符合条件的某一条路径上的节点`

有如图所示的关系图,实现筛选出从5、4、3、2、1开始,包含16、17、18、19、21、22、23、24、25、26节点的路径。可以扩展到选择树中符合条件的某一条路径上的节点

public class Test7 {

private int param;private int minId;private int minId2;private ArrayList<MyComponent> list;private ArrayList<Integer> subIdList;public Test7() {    list=new ArrayList<MyComponent>();     MyComponent c2=new MyComponent(6, 17);    MyComponent c3=new MyComponent(6, 18);    MyComponent c4=new MyComponent(6, 16);    MyComponent c6=new MyComponent(15, 28);    MyComponent c7=new MyComponent(15, 27);    MyComponent c9=new MyComponent(13, 26);    MyComponent c10=new MyComponent(13, 25);    MyComponent c11=new MyComponent(13, 14);    MyComponent c12=new MyComponent(13, 29);    MyComponent c14=new MyComponent(20, 8);    MyComponent c16=new MyComponent(9, 33);    MyComponent c17=new MyComponent(34, 9);    MyComponent c18=new MyComponent(35, 9);    MyComponent c19=new MyComponent(11, 9);    MyComponent c20=new MyComponent(11, 24);    MyComponent c21=new MyComponent(11, 23);    MyComponent c22=new MyComponent(11, 32);    MyComponent c24=new MyComponent(10, 21);    MyComponent c25=new MyComponent(10, 30);    MyComponent c26=new MyComponent(12, 22);    MyComponent c27=new MyComponent(12, 31);    MyComponent c28=new MyComponent(7, 8);    MyComponent c29=new MyComponent(7, 19);    MyComponent c30=new MyComponent(10, 12);    MyComponent c23=new MyComponent(5, 10);    MyComponent c15=new MyComponent(4, 9);    MyComponent c13=new MyComponent(3, 7);    MyComponent c8=new MyComponent(2, 13);    MyComponent c1=new MyComponent(1, 6);    MyComponent c5=new MyComponent(1, 15);    //顺序 放到最后    list.add(c1);    list.add(c5);    list.add(c8);    list.add(c15);    list.add(c23);    list.add(c13);    list.add(c2);    list.add(c3);    list.add(c4);    list.add(c6);    list.add(c7);    list.add(c9);    list.add(c10);    list.add(c11);    list.add(c12);    list.add(c14);    list.add(c16);    list.add(c17);    list.add(c18);    list.add(c19);    list.add(c20);    list.add(c21);    list.add(c22);    list.add(c24);    list.add(c25);    list.add(c26);    list.add(c27);    list.add(c28);    list.add(c29);    list.add(c30);    //迭代    subIdList=new ArrayList<Integer>();    subIdList.add(15);    subIdList.add(16);    subIdList.add(17);    subIdList.add(18);    subIdList.add(19);    subIdList.add(20);    subIdList.add(21);    subIdList.add(22);    subIdList.add(23);    subIdList.add(24);    subIdList.add(25);    subIdList.add(26);    subIdList.add(1);    subIdList.add(2);    subIdList.add(3);    subIdList.add(4);    subIdList.add(5);     subIdList.add(15);    subIdList.add(6);    subIdList.add(7);    subIdList.add(8);    subIdList.add(9);    subIdList.add(10);    subIdList.add(11);    subIdList.add(12);    subIdList.add(23);    subIdList.add(14);    subIdList.add(27);    subIdList.add(28);    subIdList.add(29);    subIdList.add(30);    subIdList.add(31);    subIdList.add(32);    subIdList.add(33);    subIdList.add(34);    subIdList.add(35);    minId=0;    minId2=0;    for(int i=0;i<subIdList.size();i++){        param=subIdList.get(i);        MyMethod(param,list);    }    for(int i=0;i<list.size();i++){        System.out.println(list.get(i).getStartId()+" aaaa "+list.get(i).getEndId());    }}private void MyMethod(int subId,ArrayList<MyComponent> list) {    /*     * 5、4、3、2、1表示每一条路径的开始节点     *      * 16、17、18、19、21、22、23、24、25、26表示将要筛选的路径上的最终节点     * */    if(subId!=5&&subId!=4&&subId!=3&&subId!=2&&subId!=1){        for(int i=0;i<list.size();i++){            int sId=list.get(i).getStartId();            int eId=list.get(i).getEndId();            if((subId==sId||subId==eId)){                minId=subId==eId?sId:eId;                if(!judgeFinal(subId, minId)){                    if(minId!=minId2){                        if(minId!=5&&minId!=4&&minId!=3&&minId!=2&&minId!=1){                            //判断是不是zui后一个节点                            if(!judgeFinal(minId, subId)){                                minId2=subId;                                MyMethod(minId, list);                             }else if(minId!=16&&minId!=17&&minId!=18                                    &&minId!=19&&minId!=21&&minId!=22                                    &&minId!=23&&minId!=24&&minId!=25&&minId!=26                                    ){                                minId2=0;                                list.remove(i);                                MyMethod(param, list);                            }                        }else{                            continue;                        }                    }                 }                else if(subId!=16&&subId!=17&&subId!=18                        &&subId!=19&&subId!=20&&subId!=21&&subId!=22                        &&subId!=23&&subId!=24&&subId!=25&&subId!=26                        ){                    minId2=0;                    list.remove(i);                    MyMethod(param, list);                }            }        }    }else{        return;    }}

/*
判断是不是最后一个节点
*/
private boolean judgeFinal(int id1,int id2){

        ArrayList<Integer> myList=new ArrayList<Integer>();        for(int i=0;i<list.size();i++){            int sId=list.get(i).getStartId();            int eId=list.get(i).getEndId();            if((id1==sId||id1==eId)){                int id3 = id1==eId?sId:eId;                myList.add(id3);            }        }        if(myList.size()==1&&(myList.get(0)==id2)){            return true;        }else {            return false;        }}public static void main(String[] args) {    new Test7();}

}

0 0
原创粉丝点击