Pagini recente » Cod sursa (job #1673914) | Cod sursa (job #1943776) | Cod sursa (job #510182) | Cod sursa (job #1872181) | Cod sursa (job #1362031)
#include <iostream>
#include <fstream>
using namespace std;
int n, a[101][101];
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
//Algoritul Roy-Floyd pentru determinarea celor mai scurte drumuri intre oricare doua noduri din graf
//se citeste matricea ponderilor
void citire()
{
f >> n;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++) f >> a[i][j];
}
void afisare()
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++) g << a[i][j] << " ";
g << "\n";
}
}
void royFloyd()
{
for(int k=1; k<=n; k++)
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
/*incerc sa merg de la nodul i la nodul j prin nodul k
daca de la i la k si de la k la j exista drum
si drumul direct de la i la j costa mai mult decat suma drumurilor de la i la k si de la k la j
sau nu existra drum de la i la j
si i este diferit de j
atunci costul drumului de la i la j va fi suma costurilor drumurilor de la i la k si de la k la i;
*/
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];
}
int main()
{
citire();
royFloyd();
afisare();
return 0;
}