Pagini recente » Cod sursa (job #1936114) | Cod sursa (job #226112) | Istoria paginii runda/lasm-baraj3-cl11-12/clasament | Cod sursa (job #1689530) | Cod sursa (job #2912159)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 1000000000
using namespace std;
ifstream fi("royfloyd.in");
ofstream fo("royfloyd.out");
int N;
int M[101][101];
int MD[101][101];
int D[101];
vector <int>V[101];
queue<int>coada;
void BFS()
{
while(!coada.empty())
{
int x=coada.front();
coada.pop();
for(int i=0;i<V[x].size();i++)
{
int vecin=V[x][i];
if(D[vecin]>D[x]+M[x][vecin])
{
D[vecin]=D[x]+M[x][vecin];
coada.push(vecin);
}
}
}
}
int main()
{
fi>>N;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
fi>>M[i][j];
if(i!=j && M[i][j]!=0)
V[i].push_back(j);
}
for(int i=1;i<=N;i++)
{
///Source node i
for(int j=1;j<=N;j++)
D[j]=INF;
D[i]=0;
coada.push(i);
BFS();
for(int j=1;j<=N;j++)
{
if(D[j]==0 || D[j]==INF)
MD[i][j]=0;
else
MD[i][j]=D[j];
}
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
fo<<MD[i][j]<<" ";
fo<<"\n";
}
return 0;
}