hdu 2544 (spfa)

spfa的模板,但是,是用邻接表存边的,但是邻接表神物,不懂邻接表的可以去看我的邻接表随笔

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<queue>
 4 #include<algorithm>
 5 using namespace std;
 6 #define xx 10005
 7 #define INF 0x2fffffff
 8 queue<int>que;
 9 int t,pre[xx];//边标号,表头;
10 int dis[xx],inque[xx];
11 struct node
12 {
13     int st,nd,ln,next;
14 }edge[xx];
15 void addedge(int st,int nd,int ln)
16 {
17     edge[t].st=st;
18     edge[t].nd=nd;
19     edge[t].ln=ln;
20     edge[t].next=pre[st];
21     pre[st]=t++;
22 }
23 void spfa(int n)
24 {
25     int i,u,v;
26     while(!que.empty())
27         que.pop();
28     fill(dis,dis+xx,INF);
29     memset(inque,0,sizeof(inque));
30     inque[1]=1;
31     dis[1]=0;
32     que.push(1);
33     while(!que.empty())
34     {
35         u=que.front();
36         que.pop();
37         inque[u]=0;
38         for(i=pre[u];i+1;i=edge[i].next)
39         {
40             v=edge[i].nd;
41             if(dis[v]>dis[u]+edge[i].ln)
42             {
43                 dis[v]=dis[u]+edge[i].ln;
44                 if(!inque[v])
45                 {
46                     inque[v]=1;
47                     que.push(v);
48                 }
49             }
50         }
51     }
52     printf("%d\n",dis[n]);
53 }
54 int main()
55 {
56     int n,m,i;
57     int st,nd,ln;
58     while(scanf("%d%d",&n,&m)!=EOF)
59     {
60         if(n==0&&m==0)
61             break;
62         t=1;
63         memset(pre,-1,sizeof(pre));
64         for(i=1;i<=m;i++)
65         {
66             scanf("%d%d%d",&st,&nd,&ln);
67             if(st!=nd)
68             {
69                 addedge(st,nd,ln);
70                 addedge(nd,st,ln);
71             }
72         }
73         spfa(n);
74     }
75     return 0;
76 }

 

转载于:https://www.cnblogs.com/M-cag/archive/2012/08/09/2630911.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值