java计算光缆调度备用路径

							记一下光缆路径计算的java代码。
	开发前提:由于所做项目为电信项目中的光缆调度部分。每条光缆都会连接两个局站,若某条光缆出现问题需要将其精力临时切换其他光缆上来保证业务正常运行。这时就需要计算能够连接这条光缆的起始局站和终点局站的其他光缆有那些。图例如下:其中l4为出现问题的光缆,此时需要打到其他备用的光缆,其中包含了:路径一:L4本身,路径二:l5-l9,路径三:l1-l2-l6,路径4:l1-l3-l7-l6。下面附上java代码
	![图1:示例路径](https://img-blog.csdnimg.cn/20210315092814315.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2Zlbmd6aHVpemh1NTIw,size_16,color_FFFFFF,t_70)其中StrUtils是这个类名,Line和groupLine都是StrUtils的内部类。

private class Line{
private int a;//起点局站
private int z;//终点局站
private String n;//ID或名称
Line(int a,int z,String n){
this.a=a;
this.z=z;
this.n=n;
}

}
private class GroupLine{
	List<Line> child;
	GroupLine(List<Line> c){
		this.child=c;
	}
}
static List<Line> lst= new ArrayList<Line>();
private class doTest{
	public void toDoGet() {
		/**
		 * 构建一些线
		 */
		Line l1=new Line(2,1,"l1");
		Line l2=new Line(1,3,"l2");
		Line l3=new Line(1,7,"l3");
		Line l4=new Line(2,4,"l4");
		Line l5=new Line(2,5,"l5");
		Line l6=new Line(3,4,"l6");
		Line l7=new Line(3,7,"l7");
		Line l8=new Line(3,6,"l8");
		Line l9=new Line(5,4,"l9");
		lst.add(l1);
		lst.add(l2);
		lst.add(l3);
		lst.add(l4);
		lst.add(l5);
		lst.add(l6);
		lst.add(l7);
		lst.add(l8);
		lst.add(l9);
		
		/**
		 * 目的:获取目标线的a、z端的所有备用路径
		 * 例:l4断了,就得到起点或终点为2和4的线
		 */
		List<GroupLine>  res=getTargetAZLine(l4.a, l4.z, lst, new ArrayList<Line>());
		
		for(int t=0;t<res.size();t++) {
			String out="";
			for(Line l:res.get(t).child) {
				out+=l.a+"--"+l.z+"--";
			}
			System.out.println("路径"+(t+1)+":"+out);
		}
	}
	/**
	 * 
	 * @param a 目标起点
	 * @param z 目标终点
	 * @param source 使用的源数据
	 * @param target 当前找到的合适的路径
	 * @return
	 */
	public List<GroupLine>  getTargetAZLine(int a,int z,List<Line> source,List<Line> target){
		List<GroupLine> res=new ArrayList<GroupLine>();
		boolean con=false;
		int comz=0;
		for(Line t:source) {
			for(Line e:target) {
				if(e.n.contentEquals(t.n)) {
					con=true;
					break;
				}
			}
			if(con) {
				con=false;
				continue;
			}
			
			if(t.z==a) {
				comz=t.a;
				con=true;
			}else if(t.a==a) {
				comz=t.z;
				con=true;
			}
			if(con) {
				List<Line> nt=new ArrayList<Line>();
				nt.addAll(target);
				nt.add(t);
				if(comz==z ) {
					res.add(new GroupLine(nt));
				}else {
					List<GroupLine>  tre=getTargetAZLine(t.z, z, source, nt);
					res.addAll(tre);
				}
			}
		}
		return res;
		
	}
}
public static void main(String[] arg) {
	StrUtils st=new StrUtils();
	
	doTest t=st.new doTest();
	t.toDoGet();
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值