Mai intai trebuie sa te autentifici.
Cod sursa(job #1498797)
| Utilizator | Data | 9 octombrie 2015 10:45:11 | |
|---|---|---|---|
| Problema | Floyd-Warshall/Roy-Floyd | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rf.in");
ofstream g("rf.out");
unsigned short n,i,j,a[256][256],dist[256][256],k,p,q,v[5000],ii;
void read()
{
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
f>>a[i][j];
}
}
void dijkstra(int ii)
{
for(i=1;i<=n;i++) dist[ii][i]=60000;
dist[ii][ii]=0; v[1]=ii; q=0; k=1; p=0;
do
{
for(i=q+1;i<=q+k;i++)
for(j=1;j<=n;j++)
if(dist[ii][j]>dist[ii][v[i]]+a[v[i]][j] && a[v[i]][j]>0)
{
dist[ii][j]=dist[ii][v[i]]+a[v[i]][j];
p++;
v[q+k+p]=j;
}
q+=k; k=p; p=0;
}while(k>0);
}
void write()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) g<<dist[i][j]<<" ";
g<<endl;
}
g.close();
}
int main()
{
read();
for(ii=1;ii<=n;ii++) dijkstra(ii);
write();
return 0;
}
