Advertisement
a53

Ghiocel

a53
Feb 26th, 2022
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. #define pinf 100000000 ///pentru plus infinit, o valoare mare care nu exista
  4. using namespace std;
  5. int a[101][101],n,m,g,k,F[101];
  6. FILE *fin,*fout;
  7.  
  8. void citire()
  9. {
  10. fscanf(fin,"%d %d %d",&n,&m,&g); /// Citesc n,m si g
  11. for(int i=1;i<=n;++i) /// Initializare matricea
  12. for(int j=1;j<=n;++j)
  13. if(i==j)
  14. a[i][j]=0; /// Pun 0 pe diagonala principala
  15. else
  16. a[i][j]=pinf; /// si infinit in rest
  17. int x,y;
  18. for(int i=1;i<=m;++i) /// Citesc cele m muchii
  19. fscanf(fin,"%d %d\n",&x,&y),a[x][y]=a[y][x]=1;
  20. fscanf(fin,"%d ",&k); /// Citesc numarul de case k unde sunt fetele
  21. for(int i=1;i<=k;++i) /// apoi citesc casele
  22. fscanf(fin,"%d",&F[i]);
  23. }
  24.  
  25. void RoyFloyd() /// Roy Floyd
  26. {
  27. for(int k=1;k<=n;++k)
  28. for(int i=1;i<=n;++i)
  29. for(int j=1;j<=n;++j)
  30. if(a[i][j]>a[i][k]+a[k][j])
  31. a[i][j]=a[i][k]+a[k][j];
  32. }
  33.  
  34. int main()
  35. {
  36. fin=fopen("ghiocel.in","rt");
  37. fout=fopen("ghiocel.out","wt");
  38. citire();
  39. sort(F+1,F+k+1);
  40. fclose(fin);
  41. RoyFloyd();
  42. int Min=pinf;
  43. for(int i=1;i<=k;++i)
  44. if(g!=F[i])
  45. Min=min(a[g][F[i]],Min);
  46. for(int i=1;i<=k;++i)
  47. if(a[g][F[i]]==Min)
  48. fprintf(fout,"%d ",F[i]);
  49. fclose(fout);
  50. return 0;
  51. }
  52.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement