已知若干个城市的地图,求从一个城市到另一个城市的路径,要求路径中经过的城市最少
如上图所示表示从城市A到城市H的交通图,从图中要找到一条从城市A到城市H要经过城市最少的一条路线。
//定义city记录入队城市,pre记录该城市的前驱城市
class Struct{
int city,pre;
Struct(int city,int pre){
this.city=city;
this.pre=pre;
}
}
public class 例1 {
static Struct sq[]=new Struct[65];
public static void main(String[] args) {
//交通图的邻接矩阵
int jz[][]={
{0,1,1,1,0,1,0,0},
{1,0,0,0,0,1,0,0},
{1,0,0,1,1,0,0,0},
{1,0,1,0,0,0,1,0},
{0,0,1,0,0,0,1,1},
{1,1,0,0,0,0,0,1},
{0,0,0,1,1,0,0,1},
{0,0,0,0,1,1,1,0}
};
int qh=-1;//队头
int qe=0;//队尾
sq[0]=new Struct(1,-1);//第一个结点入队
int visited[]=new int[64];//记录访问过的结点
visited[0]=1;
while(qh!=qe){ //当队不空
qh++; //结点出队
for (int i = 0; i < jz.length; i++) {
//扩展结点---如果两个结点连接,并且该结点没有访问过,则扩展入队
if(jz[sq[qh].city-1][i]==1&&visited[i]==0){
qe++; //结点入队
sq[qe]=new Struct(i+1, qh);
visited[i]=1;
if(sq[qe].city==8){
out(qe);
return;
}
}
}
}
System.out.println("不可到达");
}
//输出路径
static void out(int qe){
if (qe!=-1) {
out(sq[qe].pre);
System.out.println(sq[qe].city);
}
}
}