Pagini recente » Cod sursa (job #513725) | Cod sursa (job #1580757) | Cod sursa (job #578412) | Borderou de evaluare (job #2116723) | Cod sursa (job #1051383)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,z, c[100][100], t[100],s[100], d[100],d1[100];
void dijkstra(int x)
{
int i,min,p,s[100],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;
}