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 |
help!自己写的spfa+邻接表,为何RE?代码如下: #include <iostream> using namespace std; const int maxx=(int)1e9,size=50000; typedef struct list { int value; int weight; struct list *next; }list; list *head[size],*rear[size]; void initlist(int n) { for(int i=1;i<n+1;i++) { head[i]=rear[i]=(list*)malloc(sizeof(list)); head[i]->next=NULL; head[i]->weight=0; } } void destroylist(int n) { for(int i=1;i<n+1;i++) while(head[i]) { rear[i]=head[i]->next; free(head[i]); head[i]=rear[i]; } } void enlistone(int a,int b,int c) { list *p; p=(list*)malloc(sizeof(list)); p->value=b; p->weight=c; p->next=NULL; rear[a]->next=p; rear[a]=p; head[a]->weight++; } void tralist(int a,int &r,int n,int *q,int *d,bool *in) { int b,c; list *p; p=head[a]->next; while(p) { b=p->value; c=p->weight; if(d[a]+c<d[b]) { d[b]=d[a]+c; if(!in[b]) { q[++r]=b; in[b]=1; } } p=p->next; } } int spfa(int vs,int n,int *shord) { int h=0,r=1,x,i,queue[size]; bool ifin[size]; for(i=1;i<n+1;i++) { queue[i]=ifin[i]=0; shord[i]=maxx; } shord[vs]=0; queue[r]=vs; ifin[vs]=1; while(h<r) { x=queue[++h]; ifin[x]=0; tralist(x,r,n,queue,shord,ifin); } return h; } int main() { int i,m,n,a,b,c,shord[size]; while(cin>>n>>m) { initlist(n); for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); enlistone(a,b,c); } spfa(1,n,shord); cout<<shord[n]<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator