SPFA首题!hdu-2544

来源:互联网 发布:55寸液晶电视推荐 知乎 编辑:程序博客网 时间:2024/04/30 11:48

刚才看了一下SPFA,很简单。时间有限,见BAIDU。说是BELLMAN的优化,不过我觉得更像DIJKSTRA

#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE 200#define QSIZE 200#define INF 9999999int f[SIZE][SIZE];int d[SIZE];int inq[SIZE];int que[QSIZE],head,tail,len;int N,M;int push(int x){que[tail++]=x;len++;if(tail==QSIZE)tail=0;return 0;}int pop(int *x){*x=que[head++];len--;if(head==QSIZE)head=0;return 0;}int main(void){#ifndef ONLINE_JUDGEfreopen("in","r",stdin);#endifint i,x,t1,t2,t3;while(scanf("%d%d",&N,&M),M||N){memset(f,0,sizeof(f));for(i=0;i<M;i++){scanf("%d%d%d",&t1,&t2,&t3);f[t1][t2]=f[t2][t1]=t3;}for(i=1;i<=N;i++)inq[i]=0, d[i]=INF;head=tail=len=0;push(1);inq[1]=1;d[1]=0;while(len>0){pop(&x);inq[x]=0;for(i=1;i<=N;i++)if(f[x][i] && d[x]+f[x][i]<d[i]){d[i]=d[x]+f[x][i];if(!inq[i])push(i),inq[i]=1;}}printf("%d\n",d[N]);}return 0;}


 

原创粉丝点击