HDU 3790 (最短路)
来源:互联网 发布:小清新调色思路 知乎 编辑:程序博客网 时间:2024/05/20 23:55
Floyd 算法求解,结果超时;
超时代码:
#include <cstdio>#include <cstring>#define INF 0xfffffff#define max 1010int dist[max][max],mone[max][max];int n,m;void Floyd (){for (int k=1;k<=n;k++)for (int i=1;i<=n;i++){if (dist[i][k] != INF)for (int j=1;j<=n;j++){int tmp = dist[i][k]+dist[k][j];if (tmp < dist[i][j]){dist[i][j] = tmp;mone[i][j]= mone[i][k]+mone[k][j];}else if (tmp == dist[i][j] && mone[i][k]+mone[k][j] < mone[i][j])mone[i][j] = mone[i][k]+mone[k][j];}}}int main (){while (~scanf ("%d%d",&n,&m) && n && m){int a,b,c,d;for (int i=1;i<n;i++)for (int j=i+1;j<=n;j++){dist[i][j] = dist[j][i] = INF;mone[i][j] = mone[j][i] = INF;}for (int i=1;i<=n;i++){dist[i][i]=0;mone[i][i]=0;}while (m--){scanf ("%d%d%d%d",&a,&b,&c,&d);if (c < dist[a][b]){dist[a][b] = dist[b][a] = c;mone[a][b] = mone[b][a] = d;}}scanf ("%d%d",&a,&d);Floyd ();printf ("%d %d\n",dist[a][d],mone[a][d]);}return 0;}
Dijkstra 算法;
AC代码:
#include <cstdio>#include <cstring>#define INF 0xfffffff#define max 1010struct Node{int map[max][max]; //记录两个点之间的距离int val[max][max]; //记录两个点之间的花费int dist[max]; //记录点到原点的距离int mon[max]; //记录点到原点的花费}graph;int n,m;bool mark[max]; //标记被访问的点。void Dijkstra (int s){int k;memset (mark,0,sizeof (mark));for (int j=1;j<=n;j++){graph.dist[j] = graph.map[s][j];graph.mon[j] = graph.val[s][j];}mark[s] = true;graph.dist[s] = 0;graph.mon[s] = 0;for (int i=1;i<=n;i++){int min = INF;for (int j=1;j<=n;j++){if (!mark[j] && graph.dist[j] < min)min=graph.dist[k=j];}mark[k] = true;for (int index=1;index<=n;index++){if (!mark[index] && graph.map[k][index] != INF){int tmp = graph.map[k][index] + graph.dist[k];if (tmp < graph.dist[index]){graph.dist[index] = tmp;graph.mon[index] = graph.mon[k]+graph.val[k][index];}else if (tmp == graph.dist[index] && graph.mon[k]+graph.val[k][index] < graph.mon[index]){graph.mon[index] = graph.mon[k]+graph.val[k][index];}}}}}int main (){while (~scanf ("%d%d",&n,&m) && n && m){int a,b,c,d;for (int i=1;i<n;i++)for (int j=i+1;j<=n;j++){graph.map[i][j] = graph.map[j][i] = INF;graph.val[i][j] = graph.val[j][i] = INF;}while (m--){scanf ("%d%d%d%d",&a,&b,&c,&d);if (c < graph.map[a][b]){graph.map[a][b] = graph.map[b][a] = c;graph.val[a][b] = graph.val[b][a] = d;}}scanf ("%d%d",&a,&d);Dijkstra (a);printf ("%d %d\n",graph.dist[d],graph.mon[d]);}return 0;}
0 0
- HDU 3790 (最短路)
- HDU 3790 最短路
- hdu 3790 最短路
- hdu 3790 最短路
- HDU-3790 最短路 SPFA
- HDU-3790-最短路问题
- hdu 3790(最短路)
- HDU 3790 最短路 Dijkstra
- hdu 3790 最短路模板
- HDU 3790 最短路问题(最短路)
- hdu 3790 最短路spfa模板
- HDU 3790--最短路问题(Bellman_Ford)
- HDU 3790--最短路问题(Dijkstra)
- 最短路 2544hdu
- HDU 2544 最短路
- hdu 1245 最短路
- HDU最短路总结
- hDU 最短路
- Java Word Break(单词拆解)
- 阻塞队列BlockQueue的一些方法
- Writing your first Django app--Django 第一步
- 反射(reflect)--使用某个类的字节码来获取该类对象
- LeetCode——Regular Expression Matching
- HDU 3790 (最短路)
- 读TIJ -5 隐藏实施过程——(封装)
- 查看Centos系统信息命令
- Ubuntu14.04 配置
- C#中的预编译指令介绍
- android listview去掉分割线
- poj 2431 Expedition(优先队列)
- linux c求一个数组长度
- 题目:两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数中减去另外一个数的正数倍,要保证结果非负,首先得到0的人获胜。