题目:无向无负权图,求单源最短路径
分析:用Bellman-Ford算法,没有负权边,无需判断是否有负权环
#include<stdio.h>
#include<stdlib.h>
struct edge{
int a,b,cost;
struct edge *next;
};
struct edge *h,*p;
int d[105],n,e;
void BellmanFord(){
int i;
for(i=0;i<n-1;i++){
for(p=h;p!=NULL;p=p->next)
if(d[p->b]>d[p->a]+p->cost)
d[p->b]=d[p->a]+p->cost;
}
}
int main(){
// freopen("in.txt","r",stdin);
int i,a,b,c;
while(scanf("%d%d",&n,&e)&&n!=0){
h=p=NULL;
for(i=0;i<n;i++)
d[i]=0xfffffff;
d[0]=0;
for(i=0;i<e;i++){
scanf("%d%d%d",&a,&b,&c);
h=malloc(sizeof(struct edge));
h->a=a-1;
h->b=b-1;
h->cost=c;
h->next=p;
p=h;
h=malloc(sizeof(struct edge));
h->a=b-1;
h->b=a-1;
h->cost=c;
h->next=p;
p=h;
}
BellmanFord();
printf("%d\n",d[n-1]);
}
return 0;
}