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&¤t!=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());
}
}