算法实现筛选出树上符合要求的某一条路径的节点
来源:互联网 发布:js select 编辑:程序博客网 时间:2024/05/16 15:34
`
有如图所示的关系图,实现筛选出从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
- 算法实现筛选出树上符合要求的某一条路径的节点
- 递归遍历出符合要求的文件
- 查找出数组中符合某一条件的数组索引
- hdu 4781 /构造 出 符合要求的图
- 站长实践:如何设计出符合优化要求的网页
- HDU_2196_Computer(树上节点的最长路径 · dfs / bfs)
- Path Sum II 计算节点和符合条件的路径
- 利用Lambda表达式从实体集合中筛选出符合条件的实体集合
- 树上的路径
- [bzoj3784]树上的路径
- 3784: 树上的路径
- 【bzoj3784】树上的路径
- AndroidUI:筛选条的简单实现
- Mysql event时间触发器,实现定时修改某些符合某一条件的某一字段
- Mysql event时间触发器,实现定时修改某些符合某一条件的某一字段
- QT 用正则表达式从tableView中筛选出某一日期范围内的数据
- SQL Server中,如何筛选出某一字段重复的记录?
- 实现一个比较高级的字符匹配算法,即一串很长的字符,要求找到符合要求字符的字符串
- linux 设备文件属性
- Android Fragment 真正的完全解析(下篇)
- SVN更新被Locked,Can't open file 'folder/.svn/tmp/text-base/file.svn-base'
- Android中JNI的使用方法
- MATLAB获取“非免驱的相机或者摄像头”的图像数据
- 算法实现筛选出树上符合要求的某一条路径的节点
- android TranslateAnimation类:位置变化动画类
- innodb_data_file_path 参数忘记设置或者重新调整办法
- DBUS 编程总结
- 图形化插件对Eclipse的版本要求
- ssi框架学习总结
- 05快速排序
- 委托与接口之我看
- android ListView的分段显示、分页显示