Pagini recente » Cod sursa (job #2907663) | Cod sursa (job #2583778) | Cod sursa (job #266034) | Cod sursa (job #438213) | Cod sursa (job #633473)
Cod sursa(job #633473)
#include <cstdio>
using namespace std;
#define MAXN 105
#define INF
int matr[MAXN][MAXN];
int main(){
int n;
int i,j,k;
//citesc datele
FILE *fin=fopen("royfloyd.in","r");
FILE *fout=fopen("royfloyd.out","w");
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
fscanf(fin,"%d",&matr[i][j]);
}
//incep algoritmul
for(k=1;k<=n;k++)
//fixez subsetul de puncte intermediare
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
//intre i si j, cu un punct intermediar din setul 1...k
//daca e drum de la i la k si de la k la j (k nu coincide cu nicunul dintre capete)
//si nu incerc sa imbunatatesc diagonala:P
//si fie pot sa imbunatatesc ce e deja, fie defapt pana acum nu am gasit nimik, si deci acum tocmai am un drum
if(matr[i][k] && matr[k][j] && i!=j && (matr[i][k]+matr[k][j]<matr[i][j] || matr[i][j]==0))
matr[i][j]=matr[i][k]+matr[k][j];
//afisarea
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
fprintf(fout,"%d ",matr[i][j]);
fprintf (fout,"\n");
}
}