hdoj 1874 畅通工程续
现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。
每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目。城镇分别以0~N-1编号。
接下来是M行道路信息。每一行有三个整数A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城镇A和城镇B之间有一条长度为X的双向道路。
再接下一行有两个整数S,T(0<=S,T<N),分别代表起点和终点。
- #include <stdio.h>
- #define N 210
- #define INF 100000000
- int n, m;
- int vis[N], dis[N], cost[N][N];
- int min(int x, int y)
- {
- return x < y ? x : y;
- }
- void dijkstra(int s, int t)
- {
- int u, v;
- for(u = ; u < n; u++)
- {
- vis[u] = ;
- dis[u] = INF;
- }
- dis[s] = ;
- while(true)
- {
- v = -;
- for(u = ; u < n; u++)
- if(!vis[u] && (v == - || dis[u]<dis[v]))
- v = u;
- if(v == -)
- break;
- vis[v] = ;
- for(u = ; u < n; u++)
- dis[u] = min(dis[u], dis[v]+cost[v][u]);
- if(v == t)
- break;
- }
- if(dis[t] == INF)
- printf("-1\n");
- else
- printf("%d\n", dis[t]);
- return ;
- }
- int main()
- {
- int s, t;
- while(~scanf("%d%d", &n, &m))
- {
- //if(n<0 || n>=200 || m<0 || m>= 1000)
- // break;
- int i, j, a, b, c;
- for(i = ; i < n; i++)
- for(j = ; j < n; j++)
- cost[i][j] = INF;
- while(m --)
- {
- scanf("%d%d%d", &a, &b, &c);
- if(cost[a][b] > c)
- cost[a][b] = cost[b][a] = c;
- }
- scanf("%d%d", &s, &t);
- dijkstra(s, t);
- }
- return ;
- }
spfa代码:
- #include <stdio.h>
- #include <queue>
- #include <string.h>
- #define INF 0x3f3f3f3f
- using namespace std;
- int n, m, cnt, t;
- int vis[], used[], dis[];
- int head[];
- struct node
- {
- int from, to, val, next;
- }edge[];
- int add(int x, int y, int z)
- {
- edge[cnt].from = x;
- edge[cnt].to = y;
- edge[cnt].val = z;
- edge[cnt].next = head[x];
- head[x] = cnt++;
- }
- void spfa(int s)
- {
- priority_queue <int> q;
- memset(vis, , sizeof(vis));
- memset(dis, INF, sizeof(dis));
- memset(used, , sizeof(used));
- vis[s] = ;
- dis[s] = ;
- q.push(s);
- while(!q.empty())
- {
- int x = q.top();
- q.pop();
- vis[x] = ;
- for(int i = head[x]; i != -; i = edge[i].next)
- {
- int y = edge[i].to;
- if(dis[y] > dis[x]+edge[i].val)
- {
- dis[y] = dis[x]+edge[i].val;
- q.push(y);
- vis[y] = ;
- used[y]++;
- if(used[y] > n)
- return ;
- }
- }
- }
- if(q.empty())
- {
- if(dis[t]==INF)
- printf("-1\n");
- else
- printf("%d\n", dis[t]);
- }
- return ;
- }
- int main()
- {
- int s, a, b, x;
- while(~scanf("%d%d", &n, &m))
- {
- cnt = ;
- memset(head, -, sizeof(head));
- while(m--)
- {
- scanf("%d%d%d", &a, &b, &x);
- add(a, b, x);
- add(b, a, x);
- }
- scanf("%d%d", &s, &t);
- spfa(s);
- }
- return ;
- }
floyd算法:
- #include <stdio.h>
- #define INF 0x3f3f3f3f
- #define N 210
- int dis[N][N];
- int n, m;
- void init()
- {
- for(int i = ; i < n; i++)
- for(int j = ; j < n; j++)
- if(j == i)
- dis[i][j] = ;
- else
- dis[i][j] = INF;
- }
- void floyd()
- {
- for(int k = ; k < n; k++)
- for(int i = ; i < n; i++)
- {
- if(dis[i][k] != INF)
- {
- for(int j = ; j < n; j++)
- if(dis[i][j] > dis[i][k] + dis[k][j])
- dis[i][j] = dis[i][k] + dis[k][j];
- }
- }
- }
- int main()
- {
- int a, b, x;
- while(~scanf("%d%d", &n, &m))
- {
- init();
- while(m--)
- {
- scanf("%d%d%d", &a, &b, &x);
- if(dis[a][b] > x)
- dis[a][b] = dis[b][a] = x;
- }
- floyd();
- int s, t;
- scanf("%d%d", &s, &t);
- if(dis[s][t] != INF)
- printf("%d\n", dis[s][t]);
- else
- printf("-1\n");
- }
- return ;
- }
hdoj 1874 畅通工程续的更多相关文章
- hdoj 1874 畅通工程续【dijkstra算法or spfa算法】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdoj 1874 畅通工程续(单源最短路+dijkstra)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 思路分析:该问题给定一个无向图.起始点和终点,要求求出从起始点到终点的最短距离: 使用Dijks ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- hdu 1874 畅通工程续
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...
- HDU 1874畅通工程续(迪杰斯特拉算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) ...
- HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题
参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上: 迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...
- hdu 1874 畅通工程续 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...
- HDU 1874 畅通工程续【Floyd算法实现】
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
随机推荐
- VS2015 Android
最近安装了VS2015,体验了一下android 的开发,按模板创建运行了个,试下效果很不错.也可以可视化设计.但昨天再次打开或创建一个android程序后,设计界面直接不能显示,显示错误:(可能是升 ...
- Ubuntu中启用关闭Network-manager网络设置问题!
Ubuntu中启用关闭Network-manager网络设置问题! [Server版本] 在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/net ...
- lisp 题目
1.根据二叉树的中序,前序生成生成二叉树的后续 2.BFPRT算法
- [winserver]设置Server2008R2远程桌面允许每个用户运行多个会话
首先打开"服务器管理器",选择"角色"-在对话框右边部分选择"添加角色" 根据提示一步步安装即可. 然后在角色中找到"远程桌面服务 ...
- writel(readl(&pwm_timer->tcfg0) | 0xff, &pwm_timer->tcfg0);
解析这句代码什么意思! 神说:选定预分频器0 为什么? 神说:因为实验中选的是timer1,在预分频器0下: 若选择timer4,该如何写这句代码? 首先看tcfg0中选择预分频器1,在看tcfg1里 ...
- Java中的字符串常量池
ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...
- 通过WinForm控件创建的WPF控件无法输入的问题
今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...
- uniq,sort,
语 法:uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件] 补充说明: ...
- Jmeter外部函数引用
Jmeter外部函数引用 1.Beanshell引用Jmeter变量 添加用户自定义变量,输入变量名称和变量值,添加Debug sampler,用于输出初始变量值.
- Hibernate对象的状态
站在持久化的角度, Hibernate 把对象分为 4 种状态: 1. 持久化状态 2. 临时状态 3. 游离状态 4. 删除状态 Session 的特定方法能使对象从一个状态转换到另一个状态. 下面 ...