Cod sursa(job #1585437)

Utilizator andreibotilaBotila Andrei andreibotila Data 30 ianuarie 2016 23:55:21
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.45 kb
/*#include <stdio.h>

int main(){
	FILE *in, *out;
	in = fopen("royfloyd.in", "r");
	out = fopen("royfloyd.out", "w");

	int n, i, j, k;
	fscanf(in, "%d", &n);
	int matrPond[n][n];

	for(i = 1; i <= n; i++){
		for(j = 1; j <= n; j++){
			fscanf(in, "%d", &matrPond[i][j]);
		}
	}

	for(k = 1; k <= n; k++){
		for(i = 1; i <= n; i++){
			for(j = 1; j <= n; j++){
				if(matrPond[i][k] && matrPond[k][j] && 
					(matrPond[i][j] > matrPond[i][k] + matrPond[k][j] || !matrPond[i][j]) 
					&& i != j)
					matrPond[i][j] = matrPond[i][k] + matrPond[k][j];
			}
		}
	}

	for(i = 1; i <= n; i++){
		for(j = 1; j <= n; j++){
			fprintf(out, "%d ", matrPond[i][j]);
		}
		fprintf(out, "\n");
	}

	fclose(in);
	fclose(out);
	return 0;
}*/
	#include <stdio.h>
 
int n, a[105][105];
 
void citire()
{
    freopen("royfloyd.in","r",stdin);
    freopen("royfloyd.out","w",stdout);
 
    int i, j;
    scanf("%d",&n);
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++) scanf("%d",&a[i][j]);
}
 
void roy_floyd()
{
    int i, j, k;
    for (k = 1; k <= n; k++)
        for (i = 1; i <= n; i++)
            for (j = 1; j <= n; j++)
                if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) a[i][j] = a[i][k] + a[k][j];
}
 
void afis()
{
    int i, j;
    for (i = 1; i <= n; i++) 
    {
        for (j = 1; j <= n; j++) printf("%d ",a[i][j]);
        printf("\n");
    }
}
 
 
int main()
{
    citire();
    roy_floyd();
    afis();
    return 0;
}