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代码(贪心思想)#include<stdio.h> #include<string.h> #include<algorithm> #include<queue> #define inff 1000000000 #define test system("pause") using namespace std; queue<int>que; struct G { int len,en,next; }edge[1000000]; int p[2000],dis[2000]; bool inque[2000]; int n,m,num,l,t; void add(int st,int en,int len) { edge[num].en=en; edge[num].len=len; edge[num].next=p[st]; p[st]=num++; } void spfa() { int i,st; while(que.size()) que.pop(); memset(inque,false,sizeof(inque)); fill(dis,dis+n+6,0); que.push(1); inque[1]=true; //dis[1]=0; while(que.size()) { st=que.front(); inque[st]=false,que.pop(); for(i=p[st];i+1;i=edge[i].next) { int w=edge[i].en; if(st==1) { dis[w]=edge[i].len; que.push(w),inque[w]=1; continue; } if(dis[w]<(edge[i].len<dis[st]?edge[i].len:dis[st])) { dis[w]=(edge[i].len<dis[st]?edge[i].len:dis[st]); if(!inque[w]) que.push(w),inque[w]=true; } } } printf("Scenario #%d:\n%d\n",++l,dis[n]); if(t) printf("\n"); } int main() { int st,en,s; l=0; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(p,-1,sizeof(p)),num=0; while(m--) { scanf("%d %d %d",&st,&en,&s); add(st,en,s); add(en,st,s); } 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