Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <climits>
  3. using namespace std;
  4. int dist[401][401], numberOfNodes, numberOfEdges;
  5.  
  6. void init() {
  7. int from, to, weight;
  8.  
  9. //scanf("%d %d", &numberOfNodes, &numberOfEdges);
  10.  
  11. for (int i = 1; i <= numberOfNodes; i++) {
  12. for (int j = 1; j <= numberOfNodes; j++) {
  13. dist[i][j] = INT_MAX;
  14. }
  15. dist[i][i] = 0;
  16. }
  17.  
  18. for (int i = 0; i < numberOfEdges; i++) {
  19. //scanf("%d %d %d", &from, &to, &weight);
  20. cin >> from >> to >> weight;
  21. dist[from][to] = weight;
  22. }
  23. }
  24.  
  25. void floyd() {
  26. for (int k = 1; k <= numberOfNodes; k++) {
  27. for (int i = 1; i <= numberOfNodes; i++) {
  28. for (int j = 1; j <= numberOfNodes; j++) {
  29. if (dist[i][k] != INT_MAX && dist[k][j] != INT_MAX && dist[i][k] + dist[k][j] < dist[i][j]) {
  30. dist[i][j] = dist[i][k] + dist[k][j];
  31. }
  32. }
  33. }
  34. }
  35. }
  36. void printArray() {
  37. for (size_t i = 1; i <= numberOfNodes; i++)
  38. {
  39. for (size_t j = 1; j <= numberOfNodes; j++)
  40. {
  41. cout << dist[i][j] << " ";
  42. }
  43. cout << endl;
  44. }
  45. }
  46. int main() {
  47. cin >> numberOfNodes >> numberOfEdges;
  48. init();
  49. floyd();
  50. int queries;
  51. cin >> queries;
  52. for (int i = 0; i < queries; i++) {
  53. int first, second;
  54. cin >> first >> second;
  55. if (dist[first][second] == INT_MAX) {
  56. cout << -1;
  57. }
  58. else {
  59. cout << dist[first][second];
  60. }
  61. cout << endl;
  62. }
  63. //printArray();
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement