Pagini recente » Cod sursa (job #1378857) | Cod sursa (job #2286224) | Istoria paginii runda/ojiliis/clasament | Cod sursa (job #2066313) | Cod sursa (job #1051395)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,z, c[5000][5000], t[50000],s[50000], d[50000],d1[50000];
void dijkstra(int x)
{
int i,min,p,k;
for(i=1;i<=n;i++)
{
if(i==x)
{
d[i]=0;
s[i]=1;
t[i]=0;
}
else if(c[x][i]<1001)
{
d[i]=c[x][i];
s[i]=0;
t[i]=x;
}
else
{d[i]=1001;
s[i]=0;
t[i]=0;
}
for(k=1;k<=n-2;k++)
{
min=1001;
for(i=1;i<=n;i++)
if((s[i]==0)&&(d[i]<min))
{
min=d[i];
p=i;
}
}
for(i=1;i<=n;i++)
if((s[i]==0)&&(d[i]>d[p]+c[p][i]))
{
d[i]=d[p]+c[p][i];
t[i]=p;
}
}
}
int main()
{
int i,j,sur,cost,ok,k,x,y;
ifstream f("distante.in");
ofstream g("distante.out");
f>>z;
for(i=1;i<=z;i++)
{
ok=1;
f>>n>>m>>sur;
for(j=1;j<=n;j++)
f>>d1[100];
for(j=1;j<=m;j++)
{
f>>x>>y>>cost;
c[x][y]=cost;
c[y][x]=cost;
}
dijkstra(sur);
for(j=1;j<=n;j++)
{
if(d[j]!=d1[j])
ok=0;
}
if(ok==1)
g<<"DA";
else g<<"NU";
g<<'\n';
for(j=1;j<=n;j++)
{
s[j]=t[j]=d[j]=0;
}
for(k=1;k<=n;k++)
for(j=1;j<=n;j++)
c[k][j]=0;
}
f.close();
g.close();
return 0;
}