Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <algorithm>
- #define pinf 100000000 ///pentru plus infinit, o valoare mare care nu exista
- using namespace std;
- int a[101][101],n,m,g,k,F[101];
- FILE *fin,*fout;
- void citire()
- {
- fscanf(fin,"%d %d %d",&n,&m,&g); /// Citesc n,m si g
- for(int i=1;i<=n;++i) /// Initializare matricea
- for(int j=1;j<=n;++j)
- if(i==j)
- a[i][j]=0; /// Pun 0 pe diagonala principala
- else
- a[i][j]=pinf; /// si infinit in rest
- int x,y;
- for(int i=1;i<=m;++i) /// Citesc cele m muchii
- fscanf(fin,"%d %d\n",&x,&y),a[x][y]=a[y][x]=1;
- fscanf(fin,"%d ",&k); /// Citesc numarul de case k unde sunt fetele
- for(int i=1;i<=k;++i) /// apoi citesc casele
- fscanf(fin,"%d",&F[i]);
- }
- void RoyFloyd() /// Roy Floyd
- {
- for(int k=1;k<=n;++k)
- for(int i=1;i<=n;++i)
- for(int j=1;j<=n;++j)
- if(a[i][j]>a[i][k]+a[k][j])
- a[i][j]=a[i][k]+a[k][j];
- }
- int main()
- {
- fin=fopen("ghiocel.in","rt");
- fout=fopen("ghiocel.out","wt");
- citire();
- sort(F+1,F+k+1);
- fclose(fin);
- RoyFloyd();
- int Min=pinf;
- for(int i=1;i<=k;++i)
- if(g!=F[i])
- Min=min(a[g][F[i]],Min);
- for(int i=1;i<=k;++i)
- if(a[g][F[i]]==Min)
- fprintf(fout,"%d ",F[i]);
- fclose(fout);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement