Pagini recente » Cod sursa (job #2356665) | Cod sursa (job #2677165) | Cod sursa (job #70533) | Cod sursa (job #693134) | Cod sursa (job #1824691)
#include <fstream>
#include <stdint.h>
using namespace std;
fstream f1("royfloyd.in", ios::in);
fstream f2("royfloyd.out", ios::out);
int16_t n, a[101][101];
const int16_t inf=9999;
///verifici pentru fiecare nod k daca drumul de la orice nod i catre orice nod j este mai scurt prin el
///primesti matricea costurilor, a[x][y]= dist sau 0 daca nu este muchie intre x s y
int main()
{
int16_t i, j, k;
f1>>n;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
f1>>a[i][j];
if((i!=j)&&(!a[i][j])) a[i][j]=inf;
}
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
if((i!=j)&&(j!=k)&&((a[i][k]+a[k][j])<a[i][j])) a[i][j]=a[i][k]+a[k][j];
}
///afisare
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
if(a[i][j]!=inf) f2<<a[i][j]<<" ";
else f2<<0<<" ";
f2<<"\n";
}
return 0;
}
///daca schimbi ordinea forurilor pastrand cond, de ex i, j, k
///pp ca ai 3 noduri, i=1, j=2, k=3, la prima rulare valida
///tu verifici daca drumul prin k de la i la j este mai scurt decat cel direct
///dar nu stii sigur daca ai actualizat drumul de la i de ex catre j , pentru un k de indice mai mic
///deci risti sa consideri drumul mai lung decat este