Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- using namespace std;
- int main()
- {
- int *v1, *v2, *D, *S, *L, *U, *P, *V;
- int i, n, m, j, k, a, r, t, q;
- printf("Введите кол-во вершин и дуг >>");
- scanf("%d %d",&n,&m);
- v1=new int[m]; v2=new int[m];
- printf("Введите смежные вершины \n");
- for (i=0;i<m;i++)
- scanf("%d %d",&v1[i],&v2[i]);
- D=new int[m+m]; S=new int[n];
- L=new int[n]; U=new int[n];
- P=new int[n]; V=new int[n];
- for (j=0;j<n;j++) {
- L[j]=0; P[j] = 0; V[j] = 0;
- }
- for (i=0;i<m;i++)
- {L[v1[i]]++; L[v2[i]]++;}
- S[0]=0;
- for (j=1;j<n;j++) S[j]=S[j-1]+L[j-1];
- for (j=0;j<n;j++) U[j]=S[j];
- for (i=0;i<m;i++)
- {k=v1[i]; D[U[k]]=v2[i]; U[k]++;
- k=v2[i]; D[U[k]]=v1[i]; U[k]++;
- }
- printf("Введите начальную вершину \n");
- scanf("%d", &a);
- P[0]=a; r=0; t=0;
- for (i=0;i<n;i++) V[i]=0;
- V[a]=1;
- while (t<=r)
- {k=P[t]; q=V[k]+1;
- for (i=S[k];i<=S[k]+L[k]-1;i++)
- {j=D[i];
- if (V[j]==0) {V[j]=q; r++; P[r]=j;}
- }
- t++;
- }
- for(int i = 2; i <= q; i++) {
- printf("расстояние %d:", i-1);
- for(int j = 0; j < n; j++) {
- if(V[j] == i) {
- printf("%d ", j);
- }
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement