Pagini recente » Cod sursa (job #1613053) | Cod sursa (job #1549024) | Cod sursa (job #1029359) | Cod sursa (job #1880241) | Cod sursa (job #1737214)
#include <fstream>
#include <climits>
#include <queue>
#define nmax 105
using namespace std;
short a[nmax][nmax];
short d[nmax];
bool viz[nmax];
struct nod{short c,v;};
class pror
{
public: bool operator() (const nod &t1, const nod &t2)
{
return t1.c>t2.c;
};
};
priority_queue < nod , vector <nod> , pror > q;
void dij(short n)
{
nod x,y;short i;
while (!q.empty())
{
x=q.top();q.pop();
for (i=1;i<=n&&(!viz[x.v]);i++)
{
if (a[x.v][i])
{
if (d[i]>d[x.v]+a[x.v][i])
{
d[i]=d[x.v]+a[x.v][i];
y.v=i;y.c=d[i];q.push(y);
}
}
}
viz[x.v]=1;
}
}
int main()
{
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
short i,j,k,n;nod x;
f>>n;
for (i=1;i<=n;i++)
{
d[i]=SHRT_MAX,viz[i]=0;
for (j=1;j<=n;j++)
f>>a[i][j];
}
for (i=1;i<=n;i++)
{
d[i]=0;
x.c=0;x.v=i;q.push(x);
dij(n);
for (j=1;j<=n;j++)
{
if (d[j]==SHRT_MAX) d[j]=0;
g<<d[j]<<' ';
d[j]=SHRT_MAX,viz[j]=0;
}
g<<'\n';
}
f.close();
g.close();
}