`
有如图所示的关系图,实现筛选出从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();
}
}