Skip to content

Commit

Permalink
Merge branch 'MakeContributions:main' into second-largest-element
Browse files Browse the repository at this point in the history
  • Loading branch information
Prashant-Bhapkar authored Aug 31, 2022
2 parents 41ace42 + 4a7eba4 commit c1cc998
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 8 deletions.
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,14 +119,14 @@ The programming should keep the naming convention rule of each programming langu

## Reviewers

| Programming Language | Users |
| -------------------- | ------------------------------------------------ |
| C or C++ | @Arsenic-ATG, @UG-SEP, @aayushjain7, @Ashborn-SM |
| Java | @TawfikYasser, @aayushjain7 |
| C# | @ming-tsai, @Waqar-107 |
| Go | @ayo-ajayi |
| Python | @Arsenic-ATG, @sridhar-5 |
| JavaScript | @ming-tsai |
| Programming Language | Users |
| -------------------- | ----------------------------------------------------------- |
| C or C++ | @Arsenic-ATG, @UG-SEP, @aayushjain7, @Ashborn-SM, @Ashad001 |
| Java | @TawfikYasser, @aayushjain7 |
| C# | @ming-tsai, @Waqar-107 |
| Go | @ayo-ajayi |
| Python | @Arsenic-ATG, @sridhar-5 |
| JavaScript | @ming-tsai |

## Contributors

Expand Down
106 changes: 106 additions & 0 deletions algorithms/CPlusPlus/Graphs/floyd-warshall.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#include <bits/stdc++.h>

using namespace std;
const int N = 500, OO = 1e9;

int dist[N][N];

//Initialize the distance matrix with infinities to indicate that there is no edge between nodes
void initialize_dist(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
dist[i][j] = OO;
if (i == j) {
dist[i][j] = 0;
}
}
}
}

//Take Edge input and update the distance matrix
void input(int m) {
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
dist[a][b] = c;
dist[b][a] = c;
}
}

//Perform Floyd-Warshall algorithm to calculate all shortest paths
int floyd(int n) {
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dist[i][j] > dist[i][k] + dist[k][j]) {
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
}

//Take queries and output the shortest distance for each query
void output(int q) {
for (int i = 0; i < q; i++) {
int x, y;
cin >> x >> y;
cout << dist[x][y] << endl;
}
}

int main() {
int n, m, q;
cin >> n; // Number of nodes
initialize_dist(n);
cin >> m; // Number of edges
input(m);
floyd(n);
cin >> q; // Number of queries
output(q);
return 0;
}

/*
Time Complexity: O(n^3)
Memory Complexity: O(n^2)
*/

/*
Example:
5 // Number of nodes
10 // Number of edges
0 1 5 // Edge from Node 0 to Node 1 with Weight 5
0 2 3
0 3 4
0 4 1
1 2 4
1 3 1
1 4 1
2 3 1
2 4 2
3 4 4
10 // Number of Queries
0 1 // Print Minimum Path between Nodes 0 and 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
2 4
3 4
Output:
2 //Minimum path from 0 to 1
3 //Minimum path from 0 to 2
3 //Minimum path from 0 to 3
1 //Minimum path from 0 to 4
2 //Minimum path from 1 to 2
1 //Minimum path from 1 to 3
1 //Minimum path from 1 to 4
1 //Minimum path from 2 to 3
2 //Minimum path from 2 to 4
2 //Minimum path from 3 to 4
*/
1 change: 1 addition & 0 deletions algorithms/CPlusPlus/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
- [Connected Components](Graphs/total-connected-components.cpp)
- [Dijkstra's Algorithm](Graphs/dijkstra.cpp)
- [Cycle Detection](Graphs/cycle-detection.cpp)
- [Floyd Warshall](Graphs/floyd-warshall.cpp)

## Multiplication

Expand Down

0 comments on commit c1cc998

Please sign in to comment.