Pagini recente » Cod sursa (job #1032284) | Cod sursa (job #773609) | Cod sursa (job #1832764) | Profil TuDOr7173 | Cod sursa (job #2311843)
#include <cstdio>
#include <bitset>
#include <deque>
using namespace std;
FILE *fin,*fout;
int start[102],t[3][10002],d[102][102],drum[102];
bool viz[102];
int n;
deque <int>q;
void bell(int no)
{
int nod,p;
for(int i=1;i<=n;++i)
drum[i]=2000000000;
q.push_back(no);
viz[no]=1;
drum[no]=0;
while(!q.empty())
{
nod=q.front();
q.pop_front();
viz[nod]=0;
p=start[nod];
while(p)
{
if(drum[t[0][p]]>drum[nod]+t[2][p])
{
drum[t[0][p]]=drum[nod]+t[2][p];
if(viz[t[0][p]]==0)
{
q.push_back(t[0][p]);
viz[t[0][p]]=1;
}
}
p=t[1][p];
}
}
for(int i=1;i<=n;++i)
d[no][i]=min(d[no][i],drum[i]);
}
int main()
{
int k=0,x;
fin=fopen("royfloyd.in","r");
fout=fopen("royfloyd.out","w");
fscanf(fin,"%d",&n);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
{
fscanf(fin,"%d",&x);
if(x)
{
++k;
t[0][k]=j;
t[1][k]=start[i];
start[i]=k;
t[2][k]=x;
}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
d[i][j]=2000000000;
for(int i=1;i<=n;++i)
bell(i);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
fprintf(fout,"%d ",d[i][j]);
fprintf(fout,"\n");
}
return 0;
}