标签:
从城市1到城市到城市3有很多条路,每条路的路况各不相同,所耗费的时间都标记在了箭头上,现在需要找出从1到3的最短路径。
无向图:意思是来回的路径值是一样的
无权图:意思是每套路径的值是一样的
package myalgorithm; import java.util.LinkedList; import java.util.Queue; /*BFS用于记录的位置和值的结构*/ class node { node(int cur,int valparam) { this.cur = cur; this.value = valparam; } int cur,value; } public class ShortPath { /*这里是对称点的,-1表示此路不通*/ int[][] graph = { { 0,1,1,-1,-1}, { 1,0,1, 1,-1}, { 1,1,0, 1,1}, {-1,1,1, 0,1}, {-1,1,1,-1,0} }; /*全局最短路径*/ public int stepnum = 999; /*初始标记数组都为0*/ public int[]mark = new int[graph.length]; /*BFS算法*/ public void BFS(node startPoint) { //起始点装入队列 Queue<node> queue = new LinkedList<node>(); queue.offer(startPoint); node t1; top: while(!queue.isEmpty()) { //取队首,出队后不再入队,value也自此固定 t1 = queue.poll(); mark[t1.cur] = t1.value;//标记步数 for(int i=0;i<5;i++) { //找到目的地5 if(i==4 && graph[t1.cur][i] != -1) { stepnum = t1.value + 1;//下一步可到 mark[t1.cur] = stepnum; break top; } //继续接着找,把空路径添加到队列末尾 //不是炸弹和围墙,并且没有被标记 if(graph[t1.cur][i] != -1 &&mark[i] == 0) { //入队 queue.offer(new node(i,t1.value+1)); } } } } /*main函数*/ public static void main(String[] args) { ShortPath my = new ShortPath(); long start = System.currentTimeMillis(); my.BFS(new node(0,0)); long end = System.currentTimeMillis(); System.out.println("BFS step: " + my.stepnum + " time:" + (end-start)); } }
标签:
原文地址:http://www.cnblogs.com/mingziday/p/4851853.html