Pagini recente » Cod sursa (job #2489576) | Cod sursa (job #2694326) | Cod sursa (job #195286) | Cod sursa (job #1470923) | Cod sursa (job #502061)
Cod sursa(job #502061)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
typedef unsigned int ui;
int ** allocate(ui wi,ui he) {
int ** G = (int**)calloc(he,sizeof(int*));
ui i;
for(i = 0;i < he; ++i) {
G[i] = (int*)calloc(wi,sizeof(int));
}
return G;
}
void printPath(int ** phi,ui N,ui X,ui Y) {
}
int main() {
FILE *fin = fopen("royfloyd.in","r"), *fout = fopen("royfloyd.out","w");
ui N;
fscanf(fin,"%u",&N);
int **G = allocate(N,N);
ui i,j;
for(i = 0;i < N; ++i) {
for(j = 0;j < N; ++j) {
fscanf(fin,"%d",&G[i][j]);
}
}
int **min = allocate(N,N), ** phi = allocate(N,N);
for(i = 0;i < N; ++i)
for(j = 0;j < N; ++j) {
min[i][j] = G[i][j] != 0 ? G[i][j] : i == j ? 0 : INT_MAX;
phi[i][j] = INT_MAX;
}
ui k;
for(k = 0;k < N; ++k)
for(i = 0;i < N; ++i)
for(j = 0;j < N; ++j) {
if(min[i][k] < INT_MAX && min[k][j] < INT_MAX)
if(min[i][j] > min[i][k] + min[k][j]) {
min[i][j] = min[i][k] + min[k][j];
phi[i][j] = k;
}
}
for(i = 0;i < N; ++i) {
for(j = 0;j < N; ++j) {
fprintf(fout,"%d ",min[i][j] == INT_MAX ? 0 : min[i][j]);
}
fprintf(fout,"\n");
}
return 0;
}