您的位置:首页 > 编程语言 > Java开发

Dijkstra算法java实现

2015-06-04 14:52 387 查看
看到网上的Dijkstra算法写的都好复杂,我自己就简单的写了一个,例子为书上的例子。

public class Dijkstra {

public static void main(String[] args) {

int arcs[][] = {

{Integer.MAX_VALUE,Integer.MAX_VALUE,10,Integer.MAX_VALUE,30,100},

{Integer.MAX_VALUE,Integer.MAX_VALUE,5,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE},

{Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,50,Integer.MAX_VALUE,Integer.MAX_VALUE},

{Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,10},

{Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,20,Integer.MAX_VALUE,60},

{Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE,Integer.MAX_VALUE}

};

//存放的为顶点所在数组的ID和顶点名称

Map<Integer, String> v = new HashMap<Integer,String>();

//不存放源点

//v.put(0,"v0");

v.put(1,"v1");

v.put(2,"v2");

v.put(3,"v3");

v.put(4,"v4");

v.put(5,"v5");

Set<Integer> s = new HashSet<Integer>();

//s中存放尚未找到最短路径的顶点的id

s.addAll(v.keySet());

int minPath;

int id;

int removeId;

Iterator<Integer> it = null;

for(int i=0; i<v.size(); i++) {

removeId = 0;

minPath = Integer.MAX_VALUE;

it = s.iterator();

while(it.hasNext()) {

id = it.next();

//源点到所有顶点的最短距离都存储在arcs[0]数组中

if(minPath>arcs[0][id]) {

minPath = arcs[0][id];

removeId = id;

}

}

if(minPath == Integer.MAX_VALUE) {

System.out.println("源点v0到其余顶点的距离都为不可达");

break;

}

s.remove(removeId);

System.out.println("源点v0到顶点" + v.get(removeId) + "的最短距离为:" + arcs[0][removeId]);

it = s.iterator();

while(it.hasNext()) {

id = it.next();

if(arcs[removeId][id] == Integer.MAX_VALUE) continue;

if(arcs[0][id] > minPath + arcs[removeId][id]) {

arcs[0][id] = minPath + arcs[removeId][id];

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: