Pagini recente » Cod sursa (job #79664) | Cod sursa (job #1817089) | Cod sursa (job #857008) | Cod sursa (job #1227693) | Cod sursa (job #1914028)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("graf.in");
ofstream g("graf.out");
struct el{int nod; int urm;};
el a[15000];
struct pt{int nod; int poz;};
pt v1[7501],v2[7501];
int n,m,x,y,l[7501],vv[7501],k,xx,yy,p,ll,ok;
bool viz[7501];
void ad(int x, int y)
{
k++;
a[k].nod=y;
a[k].urm=l[x];
l[x]=k;
}
void sterg()
{
for(int i=1;i<=n;i++)
viz[i]=0;
}
void parc(int nd)
{
viz[nd]=1;
v1[1].nod=nd;
v1[1].poz=0;
int in=1,sf=1,poz;
while(in<=sf)
{
poz=l[v1[in].nod];
while(poz)
{
if(viz[a[poz].nod]==0)
{
sf++;
v1[sf].nod=a[poz].nod;
v1[sf].poz=v1[in].poz+1;
viz[a[poz].nod]=1;
}
poz=a[poz].urm;
}
in++;
}
}
void parc2(int nd)
{
viz[nd]=1;
v2[1].nod=nd;
v2[1].poz=0;
int in=1,sf=1,poz;
while(in<=sf)
{
poz=l[v2[in].nod];
while(poz)
{
if(viz[a[poz].nod]==0)
{
sf++;
v2[sf].nod=a[poz].nod;
v2[sf].poz=v2[in].poz+1;
viz[a[poz].nod]=1;
}
poz=a[poz].urm;
}
in++;
}
}
int cmp(el x, el y)
{
if(x.nod<=y.nod)
return 1;
return 0;
}
int main()
{
f>>n>>m>>x>>y;
for(int i=1;i<=m;i++)
{
f>>xx>>yy;
ad(xx,yy);
ad(yy,xx);
}
int n1,poz,pozv;
parc(x);
sterg();
parc2(y);
for(int i=1;i<=n;i++)
if(v1[i].nod==y)
{
n1=i;
ll=v1[i].poz;
i=n+1;
}
a[1].nod=x;
a[2].nod=y;
a[1].urm=0;
a[2].urm=0;
int i;
k=2;
poz=1;
pozv=ll-poz;
int n2=n1;
for(i=2;i<=n2;i++)
{
pozv=ll-poz;
while(v1[i].poz==v1[i+1].poz) i++;
while(v2[n1-1].poz==pozv)
{
if(a[k].urm==ll-pozv)
{
k--;
while(v2[n1-1].poz==pozv) n1--;
n1++;
}
else
{
k++;
a[k].nod=v1[i].nod;
a[k].urm=v1[i].poz;
}
n1--;
}
poz++;
}
sort(a+1,a+1+k,cmp);
for(int i=1;i<=k;i++)
g<<a[i].nod<<" ";
return 0;
}