我是夏晨龙

package ceshi2;

import java.util.*;

public class Routers {
private static final int N=13;
private List<String> path = new ArrayList<>();
private ArrayList<String>Node=new ArrayList<String>(Arrays.asList("","R1","R2","R3","R4","R5","R6","R7","R8","R9","R10","R11","R12"));
private static int [][]M={
{0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,1,0,0,0,0,0,0},
{0,1,0,1,0,0,1,0,1,0,0,0,0},
{0,0,1,0,1,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,1,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,1,0,0,0},
{0,1,1,0,1,1,0,0,0,0,0,1,0},
{0,0,0,0,0,0,0,0,1,1,0,1,0},
{0,0,1,0,0,0,0,1,0,0,0,1,0},
{0,0,0,0,0,1,0,1,0,0,0,0,1},
{0,0,0,0,0,0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,1,0,0},
};
public void pathSearch(String begin,String end){
    int bn=Node.indexOf(begin);
    int ed=Node.indexOf(end);
    int []Q=new int[N+1];
    int []parent={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
    int current=bn;
    int start=0;
    Q[start]=current;
    Q[N]++;
    while(Q[N]!=0&&current!=ed){
        for(int i=0;i<N;i++){
            if(M[current][i]!=0){
                parent[i]=current;
                Q[(start+Q[N])%N]=i;
                Q[N]++;
                for(int j=0;j<N;j++){
                    M[j][i]=0;
                }
            }
        }
        start++;
        start%=N;
        Q[N]--;
        current=Q[start];
    }
    if(current==ed){
        start=-1;
        do{
            Q[++start]=current;
            current=parent[current];
        }while(Q[start]!=bn);
        for(int i=start;i>=0;i--){
            path.add(Node.get(Q[i]));
        }
    }
}
public void printPath(){
    for(int i=0;i<path.size();i++){
        if(i!=path.size()-1){
            System.out.print(path.get(i)+"->");
        }else{
        System.out.print(path.get(i));
        }
    }
}
public int getDistance(){
    return path.size()-1;
}
}
package ceshi2;
import java.util.*;
public class TestRouters {
public static void main(String[] args){
    Routers Rx=new Routers();
    String begin="R2";
    String end="R7";
    Rx.pathSearch(begin, end);
    Rx.printPath();
    System.out.println("\n");
    System.out.println(begin+"到达"+end+"距离为"+Rx.getDistance());
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值