Pagini recente » Cod sursa (job #1026786) | Cod sursa (job #3148752) | Cod sursa (job #1957321) | Cod sursa (job #3031290) | Cod sursa (job #359609)
Cod sursa(job #359609)
#include<fstream.h>
int a[52][52],t[52][52],n;
void cit()
{
int m,x,y;
ifstream fin("royfloyd.in");
fin>>n>>m;
while(m--)
{
fin>>x>>y;
a[x][y]=1;
a[y][x]=1;
}
fin.close();
}
void init_a()
{
/*Initializam matricea de adiacenta
a[i][j]=1, daca exista [i,j];
0, daca i=j;
5001(infinit), daca nu exista [i,j] si i!=j */
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]==0)
a[i][j]=5001;
for(i=1;i<=n;i++)
a[i][i]=0;
}
void constr_a_t()
{
/* Modificam matricea a a i a[i][j]=lungimea lantului minim intre i si j
iar t[i][j]=nod intermediar pe un lant de lungime minima intre i si j */
int k,i,j;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][k]+a[k][j]<a[i][j])
{
a[i][j]=a[i][k]+a[k][j];
t[i][j]=k;
}
}
ofstream fout("royfloyd.out");
void lant(int i,int j)
{
//Afiseaza lantul de lungime minima dintre i si j, fara i si j
int k;
k=t[i][j];
if(k!=0)
{
lant(i,k);
fout<<k<<" ";
lant(k,j);
}
}
void afis()
{
int i,j;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
fout<<i<<" ";
lant(i,j);
fout<<j<<'\n';
}
fout.close();
}
int main()
{
cit();
init_a();
constr_a_t();
afis();
return 0;
}