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

无权最短路径算法java实现

2017-04-21 15:05 561 查看

无权最短路径算法java实现

无权最短路径算法方法实现

完整代码

代码

路径扫描

public static void unweight(Graph s) {
Queue<Graph> q = new LinkedList<Graph>();
s.dist = 0;
q.add(s);
while (q.size() != 0) {
Graph start = q.poll();
for (Graph sadj : start.adj) {
if (sadj.dist == INFINI
4000
TY) {
sadj.dist = start.dist + 1;
sadj.latest = start;
q.add(sadj);
}
}
}
}


从源点开始更新:

将源点的距离设为0,然后入队;搜索源点临近点,判断该点是否被扫描,如果没有被扫描,则将距离设为源点距离+1,并将源点设为该点上一节点。

重复该过程,直至所有点被扫描到。

通过路径扫描得到节点之间的关系以及距离。

路径打印

private static void printPath(String graphname) {
Graph graph = find(graphname);
if (graph.latest != null) {
printPath(graph.latest.name);
System.out.print("to");
}
System.out.println(graph.name);
}


在通过路径扫描得到节点关系的基础上,采用递归进行路径打印,递归最里层为源点,依次往外打印指定的节点。

完整代码

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class DirectionShortDistance {

public static final int INFINITY = Integer.MAX_VALUE;
public static List<Graph> graphmap = new LinkedList<Graph>();

static class Graph {
public String name;
public int dist;
public LinkedList<Graph> adj = new LinkedList<Graph>();
public Graph latest;
public Graph(String name) {
this.name = name;
}
}

public static void unweight(Graph s) {

Queue<Graph> q = new LinkedList<Graph>();

s.dist = 0;

while (q.size() != 0) {
Graph start = q.poll();
for (Graph sadj : start.adj) {
if (sadj.dist == INFINITY) {
sadj.dist = start.dist + 1;
sadj.latest = start;
q.add(sadj);
}
}
}
}

public static Graph find(String name) {
for (Graph graph : graphmap) {
if (graph.name.equals(name))
return graph;
}
return null;
}

private static void printPath(String graphname) { Graph graph = find(graphname); if (graph.latest != null) { printPath(graph.latest.name); System.out.print("to"); } System.out.println(graph.name); }

public static void main(String[] args) throws Exception {
Graph v1 = new Graph("v1");
Graph v2 = new Graph("v2");
Graph v3 = new Graph("v3");
Graph v4 = new Graph("v4");
Graph v5 = new Graph("v5");
Graph v6 = new Graph("v6");
Graph v7 = new Graph("v7");

graphmap.add(v1);
graphmap.add(v2);
graphmap.add(v3);
graphmap.add(v4);
graphmap.add(v5);
graphmap.add(v6);
graphmap.add(v7);

for (Graph g : graphmap) {
g.dist = INFINITY;
g.latest = null;
}

v1.adj.add(v2);
v1.adj.add(v4);

v2.adj.add(v4);
v2.adj.add(v5);

v3.adj.add(v1);
v3.adj.add(v6);

v4.adj.add(v3);
v4.adj.add(v5);
v4.adj.add(v6);
v4.adj.add(v7);

v5.adj.add(v7);

v7.adj.add(v6);

List<Graph> vs = new ArrayList<Graph>();
vs.add(v1);
vs.add(v2);
vs.add(v3);
vs.add(v4);
vs.add(v5);
vs.add(v6);
vs.add(v7);
unweight(v3);
System.out.println("The shortest path from v3:");
for (int i = 1; i <= 7; i++) {
printPath("v" + i);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法