Pagini recente » Cod sursa (job #1466919) | Cod sursa (job #2086500) | Cod sursa (job #810084) | Cod sursa (job #2297286) | Cod sursa (job #1298036)
#include<stdio.h>
#include<stdlib.h>
int N,M,X,Y;
int *viz,*cost;
struct nod{
int val;
int cost;
nod *next;
};
nod **A;
struct queue{
int val;
queue *next;
};
queue *p=NULL,*prim=NULL,*ultim=NULL;
void push(int x) {
queue *nou;
if(prim==NULL) {
nou= new queue;
nou->val=x;
nou->next=NULL;
prim=nou;
ultim=nou;
}
else {
nou= new queue;
nou->val=x;
nou->next=NULL;
ultim->next=nou;
ultim=nou;
}
}
int pop() {
int x;
x=prim->val;
prim=prim->next;
return x;
}
int isEmpty() {
if (prim==NULL)
return 0;
return 1;
}
void citire() {
int dist;
nod *nou;
int i,x,y;
scanf("%d %d %d %d",&N,&M,&X,&Y);
A=(nod**)malloc((N+1)*sizeof(nod*));
for(i=1;i<=N;i++)
A[i]=NULL;
for(i=1;i<=M;i++) {
scanf("%d %d %d",&x,&y,&dist);
nou=new nod;
nou->val=y;
nou->cost=dist;
nou->next=A[x];
A[x]=nou;
nou=new nod;
nou->val=x;
nou->cost=dist;
nou->next=A[y];
A[y]=nou;
}
viz=(int*)calloc((N+1),sizeof(int));
cost=(int*)malloc((N+1)*sizeof(int));
}
void bfs() {
int i;
int x;
nod *q;
for(i=1;i<=N;i++)
cost[i]=-1;
cost[X]=0;
viz[X]=1;
push(X);
while(isEmpty()) {
x=pop();
q=A[x];
while(q!=NULL) {
if (viz[q->val]==0) {
push(q->val);
viz[q->val]=1;
if(x<q->val)
cost[q->val]=cost[x]+q->cost;
else
cost[q->val]=cost[x]-q->cost;
}
q=q->next;
}
}
}
int main () {
freopen("sate.in","r",stdin);
freopen("sate.out","w",stdout);
int i,j;
citire();
bfs();
printf("%d",cost[Y]);
fclose(stdin);
fclose(stdout);
return 0;
}