Pagini recente » Cod sursa (job #352785) | Cod sursa (job #230852) | Cod sursa (job #2372040) | Cod sursa (job #2893165) | Cod sursa (job #1290745)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 1005
#define inf (1<<28) // muta 1 cu 28 de biti in stanga, adica o sa vina in binar 100[25]0 aka 2^28
#define read fin
#define write fout
ifstream fin("royfloyd.in");
ofstream fout ("royfloyd.out");
int a[nmax][nmax];
int i, j, k, x, y, n, m;
int main(){
read >> n;
for(i=1; i<=n; i++) // aka for i:=1 to n do // i++ echivalent cu i:=i+1; (incrementare)
for(j=1; j<=n; j++){
read >> a[i][j]; // citim matricea de ponderi (greutati)
if(a[i][j]==0 && i!=j) a[i][j] = inf; // daca a[i][j] este egal cu 0, inseamna ca avem infinit, care poate fi notat si cu (n-1) * maxWeight + 1, sau cum l-am pus eu un aprox 2*10^8.
}
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j] = min(a[i][j], a[i][k]+a[k][j]); // best-ul lui a[i][j] se alege dintre muchia directa, sau drumul "auxiliar", minimul greutatii dintre ele
for(i=1; i<=n; i++){
for(j=1; j<=n; j++)
if(a[i][j]== inf) fout << 0 << " "; // daca e infinit afisam 0
else fout << a[i][j] << " "; // afisam matricea de drumuri minime
fout << "\n"; // \n este egal cu new line aka writeLN.
}
return 0;
}