首页 > 代码库 > UVa 10986 - Sending email
UVa 10986 - Sending email
链接:http://uva.onlinejudge.org/index.php?
option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1927
//邻接表+队列
#include <iostream> #include <string.h> #include <queue> #include <stdio.h> using namespace std; #define edge_max 100005 #define vertex_max 100005 const int inf = (1<<20); struct Node { int u,w; int next; }Edge[edge_max]; int pre[vertex_max],dist[vertex_max]; //以p[i]的i为起点储存的边数序号 int n,m,start,stop; //顶点数,边数 起点,终点 bool vis[vertex_max]; //记录 void init() { memset(pre,-1,sizeof(pre)); int index=1; int v,u,w; for(int i=0;i<m;i++) { scanf("%d%d%d",&v,&u,&w); Edge[index].u=u; Edge[index].w=w; Edge[index].next=pre[v]; pre[v]=index++; swap(v,u); Edge[index].u=u; Edge[index].w=w; Edge[index].next=pre[v]; pre[v]=index++; } } void spfa(int v) { queue <int> q; fill(dist,dist+n,inf); memset(vis,0,sizeof(vis)); dist[v]=0; vis[v]=1; while(!q.empty()) q.pop(); q.push(v); while(!q.empty()) { int top=q.front(); q.pop(); vis[top]=0; for(int i=pre[top];i!=-1;i=Edge[i].next) { int e=Edge[i].u; if(dist[e]>dist[top]+Edge[i].w) { dist[e]=dist[top]+Edge[i].w; if(!vis[e]) { q.push(e); vis[e]=1; } } } } } int main() { int t,cnt=1; scanf("%d",&t); while(t--) { scanf("%d%d%d%d",&n,&m,&start,&stop); init(); spfa(start); printf("Case #%d: ",cnt++); if(dist[stop]!=inf) printf("%d\n",dist[stop]); else printf("unreachable\n"); } return 0; }
UVa 10986 - Sending email
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。