Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
为什么我的spfa+栈得到的是wa(附源码)大牛指点一二,代码易读#include<iostream> using namespace std; struct EDGE { int a,b,c; EDGE *next; }edge[150005]; EDGE *temp; struct KID { int candy; EDGE *first; }; KID kid[30005]; int n,m,start=0,end; int spfa() { int stack[30005]; int i,k,l,top=0; EDGE *record[30005]; for(i=0;i<n;i++) { record[i]=kid[i].first; } bool visite[30005]; memset(visite,false,sizeof(visite)); kid[0].candy=0; stack[top++]=start; visite[start]=true; while(top>0) { k=stack[top-1]; for(temp=record[k];temp!=NULL;temp=temp->next) { l=temp->b; if(kid[k].candy+temp->c<kid[l].candy) { kid[l].candy=kid[k].candy+temp->c; if(visite[l]==false) { visite[l]=true; stack[top++]=l; record[k]=temp; break; } } } if(temp==NULL) { visite[k]=false; top--; } } return kid[end].candy; } int main() { int i,a,b,c; scanf("%d%d",&n,&m); end=n-1; for(i=0;i<n;i++) { kid[i].candy=INT_MAX; kid[i].first=NULL; } for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); a--; b--; edge[i].a=a; edge[i].b=b; edge[i].c=c; edge[i].next=kid[a].first; kid[a].first=&edge[i]; } printf("%d\n",spfa()); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator