Pagini recente » Cod sursa (job #782865) | Cod sursa (job #3187898) | Cod sursa (job #11195) | Cod sursa (job #1384335) | Cod sursa (job #671283)
Cod sursa(job #671283)
#include<fstream>
#include<queue>
#include<iostream>
using namespace std;
#define MAX_N 2001
#define INFINIT 99999
int n,m,k[MAX_N],d[MAX_N],t[MAX_N],nr[MAX_N];
struct nod
{
int capat,cost;
nod *next;
}*G[MAX_N];
void adauga_muchie(int i,int j,int c)
{
nod *p; p=new nod;
p->capat=j; p->cost=c;
p->next=G[i]; G[i]=p;
}
void citeste_graf(void)
{
fstream f("ubuntzei.in",ios::in);
int i,nr_k,x,y,c;
f>>n>>m;
f>>nr_k;
for(i=1; i<=nr_k; i++)
f>>k[i];
for(i=1; i<=m; i++)
{
f>>x>>y>>c;
adauga_muchie(x,y,c);
}
f.close();
}
int bellman_ford(int start)
{
int i,x,nr[MAX_N]={0};
nod *p;
queue <int> C;
for(i=2; i<=n; i++)
d[i]=INFINIT;
C.push(start);
while(!C.empty())
{
x=C.front();
C.pop();
p=G[x];
while(p)
{
if(d[x]+p->cost<d[p->capat])
{
d[p->capat]=d[x]+p->cost;
t[p->capat]=x;
C.push(p->capat);
nr[p->capat]++;
if(nr[p->capat]==n)
return 0;
}
p=p->next;
}
}
return 1;
}
void construieste_drum(int &cnt,int nod)
{
if(t[nod])
construieste_drum(cnt,t[nod]);
cnt++;
}
int main()
{
fstream g("ubuntzei.out",ios::out);
int cnt=0;
citeste_graf();
if(bellman_ford(1))
{
construieste_drum(cnt,n);
g<<cnt;
}
return 0;
}