fork download
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<climits>
  4. int graph[100][100];
  5. using namespace std;
  6. int mindist(bool mark[],int dist[],int n)
  7. {
  8. int minval = INT_MAX;
  9. int index;
  10. for(int i=0;i<n;i++)
  11. {
  12. if(mark[i] == false && dist[i]<minval)
  13. {
  14. minval = dist[i];
  15. index = i;
  16. }
  17. }
  18. return index;
  19. }
  20. void printsol(int dist[],int n)
  21. {
  22. for(int i=0;i<n;i++)
  23. {
  24. cout<<dist[i]<<endl;
  25. }
  26. }
  27. void dijikstra(int src,int n)
  28. {
  29. int dist[100];
  30. bool mark[100];
  31. for(int i=0;i<n;i++)
  32. {
  33. dist[i] = INT_MAX;
  34. mark[i] = false;
  35. }
  36. dist[src] = 0;
  37. for(int count = 0;count<n-1;count++)
  38. {
  39. int u = mindist(mark,dist,n);
  40. mark[u] = true;
  41. for(int i=0;i<n;i++)
  42. {
  43. if(mark[i] == false && graph[u][i] && dist[u]!=INT_MAX && dist[i] > dist[u]+graph[u][i])
  44. dist[i] = dist[u]+graph[u][i];
  45. }
  46. }
  47. printsol(dist,n);
  48. }
  49. int main()
  50. {
  51. int n;
  52. int src;
  53. cin>>n;
  54. for(int i=0;i<n;i++)
  55. {
  56. for(int j=0;j<n;j++)
  57. {
  58. cin>>graph[i][j];
  59. }
  60. }
  61. cin>>src;
  62. dijikstra(src,n);
  63. return 0;
  64. }
Success #stdin #stdout 0s 2768KB
stdin
9
0 4 0 0 0 0 0 8 0
4 0 8 0 0 0 0 11 0
0 8 0 7 0 4 0 0 2
0 0 7 0 9 14 0 0 0
0 0 0 9 0 10 0 0 0
0 0 4 0 10 0 2 0 0
0 0 0 14 0 2 0 1 6
8 11 0 0 0 0 1 0 7
0 0 2 0 0 0 6 7 0
0
stdout
0
4
12
19
21
11
9
8
14