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 |
高手们!请帮忙看看这个程序 为什么会超时 Dijkstra算法 先谢谢了!!!!!!!!!!!!!#include<stdio.h> #include<stdlib.h> #include<string.h> struct node{ int val,ver; struct node *next; }; struct Graph{ node *h; }G[30005]; char f[30005]; int min[30005],n; node *p; int MIN(int s,int e) { int u,v,M,j,i; //memset(f,0,sizeof(f)); //memset(min,0,sizeof(min)); for(p=G[s].h;p!=NULL;p=p->next) { min[p->ver]=p->val;} f[s]=1; for(j=1;j<n;j++) { M=2000000000; for(i=1;i<=n;i++) { if(min[i]==0)continue; if(f[i]==0&&min[i]<M) { M=min[i];v=i;} } if(v==e)return M; f[v]=1;if(M==2000000000) break; for(p=G[v].h;p!=NULL;p=p->next) { u=p->ver; if(f[u]==0) { if((p->val + M)<min[u]||min[u]==0) min[u]=p->val+M; } } } } int main() { int i,j,m,k,t,a,b,c; while(1) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++)G[i].h=NULL; for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); p=(node *)malloc(sizeof(node)); p->val=c;p->ver=b;p->next=G[a].h; G[a].h=p; } a=MIN(1,n); printf("%d\n",a); break; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator