hdu2680Choose the best route
来源:互联网 发布:销售数据统计表 编辑:程序博客网 时间:2024/06/04 19:12
1.题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2680
2.思路 :
这道题目是多个起点,一个终点,属于有向单源最短路问题。可以假设一个虚拟的起点,然后将虚拟起点到没有起点的距离设为0,这样就可以用dijkstra反向建图。
3.参考代码:
#include <stdio.h>#include <string.h>#define inf 0xffffint n,m,s;int edge[1100][1100]; ///图的邻接矩阵int dis[1100]; ///存放距离的int vis[1100]; ///标记是否访问过void dijkstra(int v){ ///dijkstra算法int i,j; ///循环变量int k=0; ///标记,一定要记得先赋初始值为0memset(vis,0,sizeof(vis)); ///初始化为都0,表示都没有访问过for(i=1;i<=n;i++)dis[i]=edge[v][i]; ///vis[v]=1; ///标记起点为已访问过的dis[v]=0; ///本身到本身的距离为0for(i=1;i<=n;i++){int min=inf;for(j=1;j<=n;j++) ///遍历所有的点{if(dis[j]<min && !vis[j]){min=dis[j];k=j;}}if(min==inf) ///如果没有找到最小值,就退出break;vis[k]=1; ///标记已访问过for(j=1;j<=n;j++) ///遍历所有的点{if(dis[j]>dis[k]+edge[k][j] && !vis[j])dis[j]=dis[k]+edge[k][j];}}if(dis[s]==inf)printf("-1\n");elseprintf("%d\n",dis[s]);}int main(){int i,j; ///循环变量int t,r;int u,v,w; ///两个站点,以及它们之间的距离while(~scanf("%d %d %d",&n,&m,&s)){for(i=0;i<=n;i++) ///注意这里的下标是从0开始的,从1不行{for(j=0;j<=n;j++) ///注意这里的下标是从0开始的,从1不行{if(i==j)edge[i][j]=0;elseedge[i][j]=edge[j][i]=inf;}}//memset(edge,inf,sizeof(edge)); ///初始化不能这样做,否则得不到正确答案 while(m--){scanf("%d %d %d",&u,&v,&w);if(edge[u][v]>w) ///不要忘记消除重边的情况edge[u][v]=w;///edge[u][v]=edge[v][u]=w; ///不能这么写,不然会WA}scanf("%d",&t);while(t--){scanf("%d",&r);edge[0][r]=0; ///所设的虚拟起点到没有顶点的距离都为0}dijkstra(0); ///从所设的虚拟起点开始}return 0;}
- hdu2680Choose the best route
- HDU2680Choose the best route
- hdu2680Choose the best route
- hdu2680Choose the best route dijkstra
- hdu2680Choose the best route(最短路Dijkstra)
- hdu2680Choose the best route (spfa算法,加个以0点为起点到每个起点,只要一遍就能算出,不然要算k次)
- hdoj_Choose the best route
- Choose the best route
- Choose the best route
- Choose the best route
- Choose the best route
- Choose the best route
- Choose the best route
- HDOJ Choose the best route
- HDU2680 Choose the best route
- hdu2680 Choose the best route
- HDOJ2680 Choose the best route
- hdoj2680 Choose the best route
- Launcher源码中Intent.createChooser()实现原理及小例子
- POJ 3026 Borg Maze【BFS+最小生成树】
- Windows Embedded Compact 2013 安装体验 ----2
- Trapping Rain Water
- 判断站点访问的终端类型(移动端还是pc端)的方法
- hdu2680Choose the best route
- C语言sscanf函数的总结
- c51和汇编
- $GLOBALS["HTTP_RAW_POST_DATA"] 说明
- hdu 4361 2013多校联合训练第3场最后一题
- sqlplus实现远程连接
- 【iOS开发】 ios开发常识 持续更新
- Hostapd-0.8.x移植到ARM Linux
- C++编程思想--函数重载和默认参数