Cod sursa(job #133674)

Utilizator marinMari n marin Data 9 februarie 2008 14:26:33
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
//parcurgere in latime cu adunarea costurilor pe ordine crescatoare
//si scaderea pe ordine descrescatoare

#include <stdio.h>
#include <stdlib.h>

#define DIM 30001

struct nod {
  long int v;
  long int c;
  nod *adr;
};

nod *v[DIM];
long int c[DIM];
char viz[DIM];
long int d[DIM];
long int n,m,p,u,i,x,y,ii,jj,cc;
nod *q;

int main(){
  FILE *f = fopen("sate.in","r");
  fscanf(f,"%ld %ld %ld %ld",&n,&m,&x,&y);
  for (i=1;i<=n;i++){
    v[i]=NULL;
  }
  for (i=1;i<=m;i++) {
    fscanf(f,"%ld %ld %ld",&ii,&jj,&cc);
    q = new nod;
//    if (ii>jj) {
      q->v=ii;
      q->c=cc;
      q->adr=v[jj];
      v[jj]=q;
//    } else {
   q=new nod;
      q->v=jj;
      q->c=cc;
      q->adr=v[ii];
      v[ii]=q;
//    }
  }
  fclose(f);

  p=1;
  u=1;
  c[1]=x;
  viz[x]=1;
  while (p<=u) {
    q = v[c[p]];
    while (q!=NULL) {
      if (viz[q->v]==0) {
	u++;
	c[u]=q->v;
	if (q->v>c[p])
	  d[u]=d[p]+q->c;
	else
	  d[u]=d[p]-q->c;
	viz[q->v]=1;
	if (q->v==y){
	  FILE *g = fopen("sate.out","w");
	  fprintf(g,"%ld",d[u]);
	  fclose(g);
	  exit(0);
	}
      }
      q=q->adr;
    }
    p++;
  }

  return 0;
}