| ||||||||||
| 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 | |||||||||
Re:队列爆了 估计 改成栈试试In Reply To:help!自己写的spfa+邻接表,为何RE? Posted by:Rieman at 2009-12-10 18:50:26 > 代码如下:
> #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