Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e56ed5e

Browse files
Added Code
1 parent 8c7d184 commit e56ed5e

File tree

2 files changed

+253
-0
lines changed

2 files changed

+253
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import java.util.*;
2+
3+
class NodeData {
4+
5+
int value;
6+
int dist;
7+
8+
NodeData(int value,int dist){
9+
this.value = value;
10+
this.dist = dist;
11+
}
12+
13+
14+
}
15+
16+
public class Dijkstra_Ninjas {
17+
18+
class Graph{
19+
ArrayList<ArrayList<NodeData>> g;
20+
int V;
21+
22+
Graph(int V){
23+
this.V = V;
24+
this.g = new ArrayList<>();
25+
for(int i=0; i<V; i++)
26+
g.add(new ArrayList<>());
27+
}
28+
29+
public void addEdge(int a, int b, int dist) {
30+
g.get(a).add(new NodeData(b,dist));
31+
g.get(b).add(new NodeData(a,dist));
32+
}
33+
34+
public void dijkstra(int src) {
35+
int[] visited = new int[this.V];
36+
int[] dist = new int[this.V];
37+
for(int i=0; i<this.V; i++)
38+
dist[i] = Integer.MAX_VALUE;
39+
dist[src] = 0;
40+
41+
dijkstra_util(src,dist,visited);
42+
display(dist);
43+
}
44+
45+
public void dijkstra_util(int src, int[] dist,int[] visited) {
46+
47+
if(src==-1)
48+
return;
49+
50+
visited[src] = 1;
51+
for(NodeData c : this.g.get(src)) {
52+
if(dist[src]+c.dist<dist[c.value])
53+
dist[c.value] = dist[src]+c.dist;
54+
}
55+
56+
int mindist = Integer.MAX_VALUE;
57+
int index = -1;
58+
for(int i=0; i<this.V; i++) {
59+
if(visited[i]==0 && dist[i]<mindist) {
60+
mindist = dist[i];
61+
index = i;
62+
}
63+
}
64+
dijkstra_util(index, dist, visited);
65+
66+
}
67+
68+
public void display(int[] arr) {
69+
for(int c:arr) {
70+
System.out.print(c+", ");
71+
}
72+
System.out.println();
73+
}
74+
75+
}
76+
77+
public static void main(String[] args) {
78+
// TODO Auto-generated method stub
79+
80+
Graph g = new Dijkstra_Ninjas().new Graph(5);
81+
g.addEdge(0, 1, 4);
82+
g.addEdge(1, 3, 5);
83+
g.addEdge(0, 2, 8);
84+
g.addEdge(1, 2, 2);
85+
g.addEdge(2, 3, 5);
86+
g.addEdge(2, 4, 9);
87+
g.addEdge(3, 4, 4);
88+
89+
g.dijkstra(0);
90+
91+
g = new Dijkstra_Ninjas().new Graph(9);
92+
g.addEdge(0, 1, 4);
93+
g.addEdge(2, 1, 8);
94+
g.addEdge(2, 3, 7);
95+
g.addEdge(3, 4, 9);
96+
g.addEdge(4, 5, 10);
97+
g.addEdge(6, 5, 2);
98+
g.addEdge(6, 7, 1);
99+
g.addEdge(0, 7, 8);
100+
g.addEdge(7, 8, 7);
101+
g.addEdge(6, 8, 6);
102+
g.addEdge(2, 8, 2);
103+
g.addEdge(2, 5, 4);
104+
g.addEdge(3, 5, 14);
105+
g.addEdge(7, 1, 11);
106+
107+
108+
109+
g.dijkstra(0);
110+
111+
}
112+
113+
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import java.util.*;
2+
3+
4+
class Node implements Comparator<Node>{
5+
int data;
6+
int cost;
7+
8+
9+
public Node() {}
10+
11+
public Node(int data, int cost) {
12+
this.data = data;
13+
this.cost = cost;
14+
}
15+
16+
17+
@Override
18+
public int compare(Node node1, Node node2) {
19+
// TODO Auto-generated method stub
20+
if (node1.cost < node2.cost)
21+
return -1;
22+
if (node1.cost > node2.cost)
23+
return 1;
24+
return 0;
25+
}
26+
27+
@Override
28+
public String toString() {
29+
// TODO Auto-generated method stub
30+
return "("+this.data+","+this.cost+")";
31+
}
32+
}
33+
34+
public class Dijkstra_PQ {
35+
36+
class Graph{
37+
ArrayList<ArrayList<Node>> g;
38+
int V;
39+
40+
Graph(int V){
41+
this.V = V;
42+
g = new ArrayList<>();
43+
for(int i=0; i<this.V; i++)
44+
g.add(new ArrayList<>());
45+
}
46+
47+
public void addEdge(int a, int b,int dist) {
48+
this.g.get(a).add(new Node(b,dist));
49+
this.g.get(b).add(new Node(a,dist));
50+
}
51+
52+
public void dijkstra(int src) {
53+
int[] dist = new int[this.V];
54+
55+
for(int i=0; i<this.V; i++)
56+
dist[i] = Integer.MAX_VALUE;
57+
dist[src] = 0;
58+
59+
PriorityQueue<Node> pq = new PriorityQueue<>(new Node());
60+
pq.add(new Node(src,0));
61+
62+
HashSet<Integer> visited = new HashSet<>();
63+
64+
while(visited.size()!=this.V) {
65+
66+
int curr = pq.remove().data;
67+
visited.add(curr);
68+
69+
visitNeighbors(curr,visited,dist,pq);
70+
71+
72+
}
73+
74+
for(int d : dist) {
75+
System.out.print(d+", ");
76+
}
77+
System.out.println();
78+
System.out.println(pq);
79+
}
80+
81+
public void visitNeighbors(int curr,HashSet<Integer> visited,int[] dist,PriorityQueue<Node> pq) {
82+
83+
for(Node c : this.g.get(curr)) {
84+
85+
if(!visited.contains(c.data)) {
86+
87+
if(dist[curr]+c.cost<dist[c.data]) {
88+
dist[c.data] = dist[curr]+c.cost;
89+
pq.add(new Node(c.data,dist[c.data]));
90+
}
91+
92+
93+
94+
}
95+
}
96+
97+
}
98+
}
99+
100+
public static void main(String[] args) {
101+
// TODO Auto-generated method stub
102+
103+
Graph g = new Dijkstra_PQ().new Graph(5);
104+
105+
g.addEdge(0, 1, 4);
106+
g.addEdge(1, 3, 5);
107+
g.addEdge(0, 2, 8);
108+
g.addEdge(1, 2, 2);
109+
g.addEdge(2, 3, 5);
110+
g.addEdge(2, 4, 9);
111+
g.addEdge(3, 4, 4);
112+
113+
g.dijkstra(0);
114+
115+
g = new Dijkstra_PQ().new Graph(9);
116+
117+
g.addEdge(0, 1, 4);
118+
g.addEdge(2, 1, 8);
119+
g.addEdge(2, 3, 7);
120+
g.addEdge(3, 4, 9);
121+
g.addEdge(4, 5, 10);
122+
g.addEdge(6, 5, 2);
123+
g.addEdge(6, 7, 1);
124+
g.addEdge(0, 7, 8);
125+
g.addEdge(7, 8, 7);
126+
g.addEdge(6, 8, 6);
127+
g.addEdge(2, 8, 2);
128+
g.addEdge(2, 5, 4);
129+
g.addEdge(3, 5, 14);
130+
g.addEdge(7, 1, 11);
131+
132+
133+
134+
g.dijkstra(0);
135+
136+
137+
138+
}
139+
140+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /