Pagini recente » Istoria paginii runda/porc_aur | Cod sursa (job #999454) | Cod sursa (job #675121) | Cod sursa (job #270186) | Cod sursa (job #875969)
Cod sursa(job #875969)
#include <cstdio>
#include <vector>
using namespace std;
int** allocEfficientMatrix(int m, int n)
{
int **matrix = new int*[m]();
int *v = new int[m*n]();
for(int i = 0; i < m; ++i)
{
matrix[i] = &v[i*n];
}
return matrix;
}
void deleteEfficientMatrix(int **matrix, int m, int n)
{
delete[] matrix[0];
delete[] matrix;
}
void readMatrix(int **matrix, int m, int n)
{
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
scanf("%d", &matrix[i][j]);
}
void printMatrix(int **matrix, int m, int n)
{
for(int i = 0; i < m; ++i)
{
for(int j = 0; j < n; ++j)
printf("%d ", matrix[i][j]);
printf("\n");
}
}
void redirectInput(const char *in, const char *out)
{
freopen(in, "r", stdin);
freopen(out, "w", stdout);
}
void solve(int **m, int n)
{
for(int k = 0; k < n; ++k)
{
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
{
int w = m[i][k] + m[k][j];
if(i != j && m[i][k] && m[k][j] && (w < m[i][j]) )
m[i][j] = w;
}
}
printMatrix(m, n, n);
}
int main()
{
redirectInput("royfloyd.in", "royfloyd.out");
int n;
scanf("%d", &n);
int** m = allocEfficientMatrix(n, n);
readMatrix(m, n, n);
solve(m, n);
deleteEfficientMatrix(m, n, n);
return 0;
}