Advertisement
TimxAG

Untitled

Jun 19th, 2017
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <iostream>
  5. using namespace std;
  6. #define P 60
  7. #define MAX 1000
  8.  
  9. int m[P][P];
  10. int v[P][P];
  11. int D[P], G[P][P], W[P][P],Z[P];
  12. int N,M,S,F;
  13. int a,b,c;
  14. int i,j,k,l,h,f;
  15.  
  16. void GRAF (int m[P][P]) {
  17.  
  18. for (i=1 ; i<=N ; i++ )
  19. D[i] = m[S][i];
  20. D[S] = 0 ;
  21.  
  22. for (j=1; j<=2 ; j++) {
  23. G[j][1]=S;
  24. G[S][j]=0;
  25. }
  26.  
  27.  
  28. for (h=1 ; h<=N ;h++) {
  29. i=0;
  30. for (j=2 ; j<=N ; j++) {
  31. for (k=1 ; k<=N ; k++) {
  32.  
  33. if (D[k] > D[j]+m[j][k])
  34. D[k]=D[j]+m[j][k] ;
  35. i++;
  36.  
  37. for (l=2 ; l<=N ; l++) {
  38. W[i][l]=D[l];
  39. if (W[i][l]<W[i-1][l])
  40. G[k][2]=j ;
  41. }
  42. }
  43. }
  44. }
  45.  
  46. printf("\n");
  47.  
  48. if (D[F]<MAX)
  49. {
  50.  
  51. printf("\nlen %d --> %d = ",S,F);
  52. printf("%d \n",D[F]);
  53.  
  54. printf(" %d --> %d : ",S,F);
  55.  
  56. i=1;
  57. Z[0]=F;
  58.  
  59. while ( G[F][2] !=0 ) {
  60. Z[i]=G[F][2];
  61. i++;
  62. G[F][2]=G[G[F][2]][2];
  63. }
  64. Z[i]=S;
  65.  
  66. for (j=i ; j>=0 ;j--)
  67. printf(" %d",Z[j]);
  68.  
  69. }
  70. // else {
  71. // printf("\nError\n\n\n");
  72. // return;
  73. //}
  74.  
  75. return;
  76.  
  77. }
  78.  
  79. void PYTU () {
  80.  
  81. while (D[F]<MAX) {
  82. GRAF(v);
  83. for (j=0 ; j<M ; j++)
  84. v[Z[j+1]][Z[j]]=MAX;
  85. }
  86.  
  87. return;
  88. }
  89.  
  90.  
  91. int main () {
  92.  
  93.  
  94. scanf ("%d %d",&N,&M);
  95.  
  96. for ( i=1 ; i<=N ; i++)
  97. for ( j=1 ; j<=N ; j++) {
  98. m[i][j]=MAX;
  99. v[i][j]=MAX;
  100. }
  101.  
  102. for (i=1 ;i<=M ;i++ ) {
  103. scanf("%d %d %d",&a,&b,&c);
  104. m[a][b]=c;
  105. // m[b][a]=1;
  106. v[a][b]=1;
  107. }
  108. for (i=1;i<=M;i++)
  109. {
  110. for (k=1;k<=M;k++) { if (m[i][k]!=1000) printf("%d ",m[i][k]); else printf("0 ");}
  111. printf("\n");
  112. }
  113. printf("\n");
  114.  
  115. printf("Start, end : ");
  116. scanf ("%d %d",&S,&F);
  117.  
  118. PYTU();
  119. printf("Min : ");
  120. GRAF(m);
  121.  
  122. getch();
  123. return 0 ;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement