Advertisement
InnaSibirova

t1

Jun 1st, 2022 (edited)
841
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     int *v1, *v2, *D, *S, *L, *U, *P, *V;
  9. int i, n, m, j, k, a, r, t, q;
  10. printf("Введите кол-во вершин и дуг >>");
  11. scanf("%d %d",&n,&m);
  12. v1=new int[m]; v2=new int[m];
  13. printf("Введите смежные вершины \n");
  14.  
  15. for (i=0;i<m;i++)
  16.  scanf("%d %d",&v1[i],&v2[i]);
  17. D=new int[m+m]; S=new int[n];
  18. L=new int[n]; U=new int[n];
  19. P=new int[n]; V=new int[n];
  20. for (j=0;j<n;j++) {
  21.     L[j]=0; P[j] = 0; V[j] = 0;
  22.     }
  23. for (i=0;i<m;i++)
  24.  {L[v1[i]]++; L[v2[i]]++;}
  25. S[0]=0;
  26. for (j=1;j<n;j++) S[j]=S[j-1]+L[j-1];
  27. for (j=0;j<n;j++) U[j]=S[j];
  28. for (i=0;i<m;i++)
  29. {k=v1[i]; D[U[k]]=v2[i]; U[k]++;
  30. k=v2[i]; D[U[k]]=v1[i]; U[k]++;
  31. }
  32. printf("Введите начальную вершину \n");
  33. scanf("%d", &a);
  34. P[0]=a; r=0; t=0;
  35. for (i=0;i<n;i++) V[i]=0;
  36. V[a]=1;
  37. while (t<=r)
  38. {k=P[t]; q=V[k]+1;
  39. for (i=S[k];i<=S[k]+L[k]-1;i++)
  40. {j=D[i];
  41.  if (V[j]==0) {V[j]=q; r++; P[r]=j;}
  42. }
  43. t++;
  44. }
  45.  
  46. for(int i = 2; i <= q; i++) {
  47.     printf("расстояние %d:", i-1);
  48.     for(int j = 0; j < n; j++) {
  49.         if(V[j] == i) {
  50.             printf("%d ", j);
  51.         }
  52.        
  53.     }
  54.     printf("\n");
  55. }
  56.    
  57.    
  58.     return 0;
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement