最小时间
来源:互联网 发布:淘宝网看女装 编辑:程序博客网 时间:2024/06/07 06:37
问题 S: 最小时间
时间限制: 1 Sec 内存限制: 128 MB
提交: 484 解决: 168
[提交][状态][讨论版]
题目描述
有多个城市组成一个铁路交通网络。任意两个城市之间有直连铁路,或者通过其他城市间接到达。给定某个城市,要求在M时间内能从该城市到达任意指定的另一城市,求最小的M。
输入
输入由多组测试用例组成
每个测试用例由多行组成,第一行是整数n(1 <= n <= 100),表示城市的数目。
其余行表示邻接矩阵A。A(i,j)的值如果是一个整数t,表示城市i与城市j有铁路直连,需要t时间到达另一方。如果A(i,j)的值为x,表明城市i与城市j之间没有直连铁路。很明显有A(i,i) = 0。
由于对称关系和A(i,i) 为 0,输入只给出矩阵的下三角。第一行A(1,1)在输入中省略,第二行只有A(2,1),下一行则是A(3,1) 和A(3,2),依此类推。
输出
输出城市1所对应的最小M。
样例输入
5
50
30 5
100 20 50
10 x x 10
样例输出
35
迪杰斯特拉算法,代码如下:
#include<stdio.h>#define MAX 100#define INF 1e7#define x 1000typedef struct _graph{ int vexs[MAX]; // 顶点集合 int vexnum; // 顶点数 int edgnum; // 边数 int matrix[MAX][MAX]; // 邻接矩阵}Graph, *PGraph;void dijkstra(Graph G){ int i,j,k; int min; int vs=0; int tmp; int dist[MAX]; int flag[MAX]; // flag[i]=1表示"顶点vs"到"顶点i"的最短路径已成功获取。 // 初始化 for (i = 0; i < G.vexnum; i++) { flag[i] = 0; // 顶点i的最短路径还没获取到。 //prev[i] = 0; // 顶点i的前驱顶点为0。 dist[i] = G.matrix[vs][i];// 顶点i的最短路径为"顶点vs"到"顶点i"的权。 } // 对"顶点vs"自身进行初始化 flag[vs] = 1; dist[vs] = 0; // 遍历G.vexnum-1次;每次找出一个顶点的最短路径。 for (i = 1; i < G.vexnum; i++) { // 寻找当前最小的路径; // 即,在未获取最短路径的顶点中,找到离vs最近的顶点(k)。 min = INF; for (j = 0; j < G.vexnum; j++) { if (flag[j]==0 && dist[j]<min) { min = dist[j]; k = j; } } // 标记"顶点k"为已经获取到最短路径 flag[k] = 1; // 修正当前最短路径和前驱顶点 // 即,当已经"顶点k的最短路径"之后,更新"未获取最短路径的顶点的最短路径和前驱顶点"。 for (j = 0; j < G.vexnum; j++) { tmp = (G.matrix[k][j]==INF ? INF : (min + G.matrix[k][j])); // 防止溢出 if (flag[j] == 0 && (tmp < dist[j]) ) { dist[j] = tmp; //prev[j] = k; } } } // 打印dijkstra最短路径的结果 //printf("dijkstra(%d): \n", G.vexs[vs]); int max=-1; for (i = 0; i < G.vexnum; i++) if(dist[i]>max&&i!=vs) max=dist[i]; printf("%d\n",max);}int change(char a[]){ int i,sum=0; for(i=0;a[i]!='\0';i++) { sum=sum*10+a[i]-'0'; } return sum;}int main(){ int n,i,j; char a[1000]; Graph G; while(~scanf("%d",&n)) { G.vexnum=n; for(i=0;i<n;i++) G.matrix[i][i]=0; for(i=1;i<n;i++) for(j=0;j<i;j++) {scanf("%s",&a); if(a[0]!='x') G.matrix[i][j]=change(a); else G.matrix[i][j]=x; G.matrix[j][i]=G.matrix[i][j];} /*for(i=0;i<n;i++) {for(j=0;j<=i;j++) printf("%d ",G.matrix[i][j]); printf("\n"); }*/ dijkstra(G); }}
阅读全文
0 0
- 最小时间
- 以太网最小发送时间
- 问题 P: 最小时间
- 关于时间的最小单位
- NSDate 最大最小时间配置
- Tickets(最小售票时间)
- DataPicker设置时间范围 最大时间和最小时间
- 前面所有input时间的最大时间<时间<后边所有Input时间的最小时间
- Win32多线程之最小锁定时间
- O(1)时间求栈中最小(大)元素
- js 日期控件WdatePicker设置最小时间
- 最小生成树 Prime算法 + 时间复杂度
- 最小生成树 kruskal算法+时间复杂度
- 课程设计 最小时间 最短路径 模板 .
- 最小平均完成时间调度问题_最小化完成时间
- 从字符串数组取得最小时间和最大时间
- 自定义时间弹出框,并限制最大时间和最小时间
- 《五项核心度量》笔记4-最小开发时间
- 坐看云起时
- Java 实现导出excel表 POI
- 数据类型
- codeforces 574B 暴力+复杂度分析
- CSS3 4 选择器
- 最小时间
- chmod
- java项目日志规约
- Maven 手动添加 JAR 包到本地仓库
- robotframework-appium使用
- 立个flag
- li标签,实现横向排列
- Sublime text 3 安装插件
- java项目服务规约