数据结构java第11天

最短路径

迪杰斯特拉算法

路径:
8
15
4 5 0.35
5 4 0.35
4 7 0.37
5 7 0.28
7 5 0.28
5 1 0.32
0 4 0.38
0 2 0.26
7 3 0.39
1 3 0.29
2 7 0.34
6 2 0.40
3 6 0.52
6 0 0.58
6 4 0.93

package Graph;

import javax.print.DocFlavor;

public class EdgeWeightedDigraph {
    private final int v; // 顶点数目
    private int E; //变得数目
    //邻接表
    private Queue<WeightedDirectedEdge>[] adj;

    //创建一个含有v个顶点的空加权有向图
    public EdgeWeightedDigraph(int v){
        //初始化顶点数目
        this.v = v;
        this.E = 0;
        this.adj = new Queue[v];
        for (int i = 0; i < adj.length; i++) {
            adj[i] = new Queue<WeightedDirectedEdge>();
        }
    }

    //获取图中的顶点个数
    public int v(){
        return v;
    }

    //获取图中边的数量
    public int E(){
        return E;
    }

    //向加权有向图中添加一条边e
    public void addEdge(WeightedDirectedEdge e){
        adj[e.from()].enqueue(e);
        E++;
    }

    //获取由顶点v指向的所有边
    public Queue<WeightedDirectedEdge> adj(int v){
        return adj[v];
    }

    //获取加权有向图的所有边
    public Queue<WeightedDirectedEdge> edges(){
        Queue<WeightedDirectedEdge> queue = new Queue<WeightedDirectedEdge>();
        for (int i = 0; i < adj.length; i++) {
            for (WeightedDirectedEdge edges : adj[i]) {
                queue.enqueue(edges);
            }
        }
        return queue;
    }
}

测试代码:

package Test;

import Graph.*;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class DijkstraSPTest {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(DijkstraSPTest.class.getClassLoader().getResourceAsStream("min_route_test.txt")));
        int total = Integer.parseInt(br.readLine());
        EdgeWeightedDigraph G = new EdgeWeightedDigraph(total);
        int edgenumbers = Integer.parseInt(br.readLine());
        for (int i = 0; i < edgenumbers; i++) {
            String line = br.readLine();
            String[] strs = line.split(" ");
            int v = Integer.parseInt(strs[0]);
            int w = Integer.parseInt(strs[1]);
            double weight = Double.parseDouble(strs[2]);

            WeightedDirectedEdge e = new WeightedDirectedEdge(v, w, weight);
            G.addEdge(e);
        }

        DijkstraSP dijkstraSP = new DijkstraSP(G, 0);
        Queue<WeightedDirectedEdge> edges = dijkstraSP.pathTo(6);

        //遍历打印
        for (WeightedDirectedEdge edge : edges) {
            System.out.println(edge.from() + "->" + edge.to() + " : " + edge.weight());
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值