Pagini recente » Cod sursa (job #20846) | Cod sursa (job #2237424) | Cod sursa (job #374206) | Cod sursa (job #168223) | Cod sursa (job #157263)
Cod sursa(job #157263)
#include<stdio.h>
#define max 101
#define infinit 1<<30
FILE *fin=fopen("royfloyd.in","r");
FILE *fout=fopen("royfloyd.out","w");
struct nod{int nd,inf; nod *urm;} *p[max];
int n,d[max],s[max];
void afisare()
{
int i;
for(i=1;i<=n;i++)
fprintf(fout,"%d ",d[i]!=infinit ? d[i] : 0);
fprintf(fout,"\n");
}
void dijkstra(int sursa)
{
int min,poz=0,i,j;
nod *c;
for(i=1;i<=n;i++)
d[i]=infinit,s[i]=0;
s[sursa]=1;
for(c=p[sursa];c;c=c->urm)
d[c->nd]=c->inf;
for(i=1;i<n;i++)
{
min=infinit;
for(j=1;j<=n;j++)
if(!s[j] && min>d[j] && d[j]!=infinit)
min=d[j],poz=j;
if(min!=infinit)
{
s[poz]=1;
for(c=p[poz];c;c=c->urm)
if((d[c->nd]>c->inf+d[poz] || d[c->nd]==infinit) && c->nd!=sursa)
d[c->nd]=c->inf+d[poz];
}
}
}
int main()
{
nod *c;
int i,j,x;
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
fscanf(fin,"%d",&x);
if(x!=0)
{
c=new nod;
c->nd=j;
c->inf=x;
c->urm=p[i];
p[i]=c;
}
}
for(i=1;i<=n;i++)
dijkstra(i),afisare();
fclose(fin);
fclose(fout);
return 0;
}