簡體   English   中英

遍歷每個圖節點並比較 java

[英]traverse every graph node and compare java

我想遍歷一個圖,並與隊列值(如果存在)進行比較。

我想實際實現這個 python 代碼到 java

遍歷當前節點


for it in gr[curr] :  
      iin f it not in pq : 
          pq.insert(0,( dist * it[1], it[0] )); 

這里,gr 是一個圖,pq 是一個隊列 arraylist,dist 是 int 變量

實際上我想在 java 中實現這個 -

https://www.geeksforgeeks.org/path-with-smallest-product-of-edges-with-weight-1/

到目前為止,這是我的完整代碼-


    package com.company;
    import java.util.*;
    public class solution {

        public static int dijkstra(int s, int d, ArrayList<ArrayList<Integer>>graph) {

            if (s == d) return 0;

            ArrayList<ArrayList<Integer>> queue = new ArrayList<>(10);
            for(int i=0; i < 10 ; i++) {
                ArrayList<Integer> sublist = new ArrayList<>(10);
                sublist.add(0);
                queue.add(sublist);
            }
            queue.get(0).add(1);
            boolean[] v = {false};
            while (!queue.isEmpty()) {
                int curr = queue.get(0).get(1);
                int dist = queue.get(0).get(0);
                queue.remove(curr);
                if (v[curr])
                    continue;
                v[curr] = true;
                if (curr == d)
                    return dist;
                Iterator<ArrayList<Integer>> iter = graph.iterator();
                while (iter.hasNext())
                {
                    queue.add()\\not completed
                }

            }
         return -1;
        }
        public static void main(String[]args)
        {
            int n = 3;
            ArrayList<ArrayList<Integer>> graph = new ArrayList<>(n+2);
            for(int i=0; i < n+2 ; i++) {
                ArrayList<Integer> list = new ArrayList<>();
                for(int j = 0; j< n+2; j++){
                    list.add(0);
                }
                graph.add(list);
            }


            graph.get(1).add(3,9);
            graph.get(2).add(3,1);
            graph.get(1).add(2,5);

            int s = 1, d = 3;
            System.out.println(dijkstra(s,d,graph));
        }
    }

在這里,您是 go,您應該創建Edge class 並使用根據距離進行比較的PriorityQueue

 public static int dijkstra(int s, int d, ArrayList<ArrayList<Edge>> graph) {

        if (s == d)
            return 0;

        PriorityQueue<Edge> queue = new PriorityQueue<>();
        queue.add(new Edge(1, s));
        boolean[] v = new boolean[graph.size()];
        v[s] = false;
        while (!queue.isEmpty()) {
            Edge edge = queue.poll();
            if (v[edge.vertex])
                continue;
            v[edge.vertex] = true;
            int dist = edge.dist;
            if (edge.vertex == d)
                return dist;

            if (graph.size() >= edge.vertex)
                for (Edge e : graph.get(edge.vertex)) {
                    if (!queue.contains(e)) {
                        queue.add(new Edge(dist * e.vertex, e.dist));
                    }
                }
        }
        return -1;
    }

    public static void main(String[] args) {
        int n = 3;
        ArrayList<ArrayList<Edge>> graph = new ArrayList<>();
        for (int i = 0; i <= n + 1; i++) {
            graph.add(new ArrayList<>());
        }
        graph.get(1).add(new Edge(3, 9));
        graph.get(2).add(new Edge(3, 1));
        graph.get(1).add(new Edge(2, 5));
        int s = 1, d = 3;
        System.out.println(dijkstra(s, d, graph));
    }

    static class Edge implements Comparable<Edge> {
        int vertex;
        int dist;

        public Edge(int dist, int vertex) {
            this.dist = dist;
            this.vertex = vertex;
        }

        @Override
        public int compareTo(Edge o) {
            return Integer.valueOf(this.dist).compareTo(Integer.valueOf(o.dist));
        }

        @Override
        public String toString() {
            return dist + ", " + vertex;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM