广度优先搜索例1

已知若干个城市的地图,求从一个城市到另一个城市的路径,要求路径中经过的城市最少


如上图所示表示从城市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);
		}
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值