Pagini recente » Cod sursa (job #2187932) | Cod sursa (job #476834) | Cod sursa (job #2617118) | Cod sursa (job #1070988) | Cod sursa (job #804351)
Cod sursa(job #804351)
#include <cstdio>
#include <vector>
#include <queue>
#define N 105
#define inf 9999999999
using namespace std;
struct Nod{
int catre;
int cost;
Nod (int x, int y){
catre = x;
cost = y;
}
};
int distante [N][N];
vector <Nod> graf[N];
int nodCurent;
int n;
struct cmp{
bool operator ()(const int &a, const int &b)const{
return distante[nodCurent][a] > distante[nodCurent][b];
}
};
priority_queue <int, vector <int>, cmp> q;
void dijkstra (int nod){
for (int i = 1; i <= n; ++ i){
distante[nod][i] = inf;
}
distante[nod][nod] = 0;
q.push(nod);
while (!q.empty()){
nod = q.top();
q.pop();
for (unsigned int i = 0; i < graf[nod].size(); ++ i){
if (distante[nodCurent][graf[nod][i].catre] > distante[nodCurent][nod] + graf[nod][i].cost){
distante[nodCurent][graf[nod][i].catre] = distante[nodCurent][nod] + graf[nod][i].cost;
q.push(graf[nod][i].catre);
}
}
}
}
void citire(){
scanf ("%d", &n);
for (int i = 1; i <= n; ++ i){
for (int j = 1; j <= n; ++ j){
int x;
scanf ("%d", &x);
if (x != 0){
Nod Y(j, x);
graf[i].push_back (Y);
}
}
}
}
void rez(){
for (int i = 1; i <= n; ++ i){
nodCurent = i;
dijkstra(i);
}
for (int i = 1; i <= n; ++ i){
for (int j = 1; j <= n; ++ j){
printf ("%d ", distante[i][j]);
}
printf ("\n");
}
}
int main()
{
freopen ("royfloyd.in", "r", stdin);
freopen ("royfloyd.out", "w", stdout);
citire();
rez();
return 0;
}