HDU-1224 最短路 SPFA

来源:互联网 发布:淘宝网短棉衣 编辑:程序博客网 时间:2024/06/05 17:55

一道十分基本的最短路。

貌似我写最短路写出了思维定势,初始化竟然错了——因为这道题的权值在结点上,不在边上。

不管怎么样,一道水题写成这个样子是不应该的==!

/* * hdu-1224 * mike-w * 2012-4-7 */#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_SIZE 128#define Q_SIZE MAX_SIZE#define INF (1<<30)int T,N,M;int f[MAX_SIZE][MAX_SIZE];int que[Q_SIZE],qhead,qtail,qlen;int inq[MAX_SIZE],dst[MAX_SIZE],pi[MAX_SIZE];int ff[MAX_SIZE];int enque(int e){if(qlen==Q_SIZE)return -1;qlen++;que[qtail]=e;qtail=(qtail+1)%Q_SIZE;return 0;}int deque(int *e){if(qlen==0)return -1;qlen--;*e=que[qhead];qhead=(qhead+1)%Q_SIZE;return 0;}int disp(int e){if(pi[e]==e)printf("%d",e);else{disp(pi[e]);printf("->%d",e);}return 0;}int spfa(void){int i,x;for(i=1;i<=N+1;i++)inq[i]=0,dst[i]=-INF,pi[i]=i;qhead=qtail=qlen=0;dst[1]=0;pi[1]=1;inq[1]=1;enque(1);while(deque(&x)!=-1){inq[x]=0;for(i=1;i<=N+1;i++){if(f[x][i] && dst[x]+ff[i]>dst[i]){dst[i]=dst[x]+ff[i];pi[i]=x;if(!inq[i])enque(i),inq[i]=1;}}}printf("points : %d\n",dst[N+1]);printf("circuit : ");disp(pi[N+1]);printf("->1\n");return 0;}int main(void){#ifndef ONLINE_JUDGEfreopen("in","r",stdin);#endifscanf("%d",&T);int ccase=1;int i,j,e1,e2;for(ccase=1;ccase<=T;ccase++){printf("CASE %d#\n",ccase);for(i=1;i<=N+1;i++)for(j=1;j<=N+1;j++)f[i][j]=0;scanf("%d",&N);for(i=1;i<=N;i++)scanf("%d",ff+i);ff[N+1]=0;scanf("%d",&M);for(i=1;i<=M;i++)scanf("%d%d",&e1,&e2),f[e1][e2]=1;spfa();if(ccase<T)putchar('\n');}return 0;}


原创粉丝点击