Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Model;
- import java.io.*;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.ArrayList;
- import java.util.List;
- import java.awt.geom.Point2D;
- import java.awt.geom.Line2D;
- public class EdgeWeightedDigraph implements Serializable {
- public static final long serialVersionUID = 20160217;
- private ArrayList<WayNode> residential, road, highway;
- public int edges;
- private HashMap<Long, ArrayList<Long>> connections;
- private HashMap<Long,Point2D> map = new HashMap<>();
- private HashMap<String, String> names = new HashMap<>();
- public EdgeWeightedDigraph(HashMap<Long, Point2D> _map, ArrayList<WayNode> _residential, ArrayList<WayNode> _road, ArrayList<WayNode> _highway) {
- map = _map;
- connections = new HashMap<>();
- residential = _residential;
- road = _road;
- highway = _highway;
- edges = 0;
- int size = 0;
- for(WayNode w : residential) {
- edges += w.vejPunkter.size()-1;
- for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
- if(!connections.containsKey(w.vejPunkter.get(i))) {
- connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
- }
- if(!connections.containsKey(w.vejPunkter.get(i+1))) {
- connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
- }
- connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
- connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
- String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
- String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
- System.out.println("temp1: " + temp);
- System.out.println("temp2: " + temp2);
- names.put(temp,w.getName());
- names.put(temp2,w.getName());
- }
- }
- for(WayNode w : road) {
- edges += w.vejPunkter.size()-1;
- for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
- if(!connections.containsKey(w.vejPunkter.get(i))) {
- connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
- }
- if(!connections.containsKey(w.vejPunkter.get(i+1))) {
- connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
- }
- connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
- connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
- String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
- String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
- names.put(temp,w.getName());
- names.put(temp2,w.getName());
- }
- }
- for(WayNode w : highway) {
- edges += w.vejPunkter.size()-1;
- for(int i = 0; i < w.vejPunkter.size()-1 ; i++) {
- if(!connections.containsKey(w.vejPunkter.get(i))) {
- connections.put(w.vejPunkter.get(i), new ArrayList<Long>());
- }
- if(!connections.containsKey(w.vejPunkter.get(i+1))) {
- connections.put(w.vejPunkter.get(i+1), new ArrayList<Long>());
- }
- connections.get(w.vejPunkter.get(i)).add(w.vejPunkter.get(i+1));
- connections.get(w.vejPunkter.get(i+1)).add(w.vejPunkter.get(i));
- String temp = String.valueOf(w.vejPunkter.get(i)) + String.valueOf(w.vejPunkter.get(i+1));
- String temp2 =String.valueOf(w.vejPunkter.get(i+1)) + String.valueOf(w.vejPunkter.get(i));
- names.put(temp,w.getName());
- names.put(temp2,w.getName());
- }
- }
- }
- public void bfs(Long from, Long to) {
- Queue<Long> queue = new Queue<>();
- HashSet<Long> marked = new HashSet<>();
- HashMap<Long, Double> distTo = new HashMap<Long, Double>();
- HashMap<Long, Long> edgeTo = new HashMap<Long, Long>();
- marked.add(from);
- distTo.put(from, 0.0);
- queue.enqueue(from);
- while(!queue.isEmpty()) {
- Long point = queue.dequeue();
- for(Long p : connections.get(point)) {
- if(!marked.contains(p)) {
- edgeTo.put(p, point);
- double weigth = distTo.get(point);
- distTo.put(p, map.get(point).distance(map.get(p))+weigth);
- marked.add(p);
- queue.enqueue(p);
- }
- if(marked.contains(to)) {
- while(!queue.isEmpty())
- queue.dequeue();
- }
- }
- }
- if(distTo.containsKey(to) && (distTo.get(to) != 0 && !from.equals(to))) {
- System.out.println("distTo " + ((distTo.get(to)*111*1000)-((distTo.get(to)*111*1000)%100)));
- System.out.print(to);
- long edge = edgeTo.get(to);
- while(edge != from) {
- System.out.print("-");
- System.out.print(edge);
- edge = edgeTo.get(edge);
- }
- System.out.print("-" + from);
- System.out.println("\n");
- } else if (from.equals(to)){
- System.out.println("Path length: 0\n");
- } else {
- System.out.println("Path length: -1\n");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement