From 00575aace6a60a2dd4be2bf597a8c5765f872cd7 Mon Sep 17 00:00:00 2001
From: arpanjain97 <arpanjain97@gmail.com>
Date: Fri, 13 Oct 2017 11:32:05 +0530
Subject: [PATCH] Add Floyd-Warshall Algorithm

---
 data_structures/Graph/FloydWarshall.py | 47 ++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)
 create mode 100644 data_structures/Graph/FloydWarshall.py

diff --git a/data_structures/Graph/FloydWarshall.py b/data_structures/Graph/FloydWarshall.py
new file mode 100644
index 000000000..f0db329d0
--- /dev/null
+++ b/data_structures/Graph/FloydWarshall.py
@@ -0,0 +1,47 @@
+
+def printDist(dist, V):
+	print("\nThe shortest path matrix using Floyd Warshall algorithm\n")
+	for i in range(V):
+		for j in range(V):
+			if dist[i][j] != float('inf') :
+				print(int(dist[i][j]),end = "\t")
+			else:
+				print("INF",end="\t")
+		print();
+
+
+
+def FloydWarshall(graph, V):
+	dist=[[float('inf') for i in range(V)] for j in range(V)]
+	
+	for i in range(V):
+		for j in range(V):
+			dist[i][j] = graph[i][j]
+
+	for k in range(V):
+		for i in range(V):
+			for j in range(V):
+				if dist[i][k]!=float('inf') and dist[k][j]!=float('inf') and dist[i][k]+dist[k][j] < dist[i][j]:
+					dist[i][j] = dist[i][k] + dist[k][j]
+
+	printDist(dist, V)	
+
+			
+
+#MAIN
+V = int(input("Enter number of vertices: "));
+E = int(input("Enter number of edges: "));
+
+graph = [[float('inf') for i in range(V)] for j in range(V)]
+
+for i in range(V):
+	graph[i][i] = 0.0;
+
+for i in range(E):
+	print("\nEdge ",i+1)
+	src = int(input("Enter source:"))
+	dst = int(input("Enter destination:"))
+	weight = float(input("Enter weight:"))
+	graph[src][dst] = weight;
+
+FloydWarshall(graph, V)