poj 1847 Tram
2015-07-22 16:07
351 查看
http://poj.org/problem?id=1847
这道题题意不太容易理解,n个车站,起点a,终点b;问从起点到终点需要转换开关的最少次数
开始的那个点不需要转换开关
数据:
这道题题意不太容易理解,n个车站,起点a,终点b;问从起点到终点需要转换开关的最少次数
开始的那个点不需要转换开关
数据:
3 2 1//第一个数车站总数3,第二个数起点2,第三个数终点1 2 2 3//第一个数有2个点可到达,两个点分别是2(不需要转换开关),3(需要转换开关) 2 3 1 2 1 2 可转化为最短路来写,转换开关次数当做最短路径
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<queue> #define INF 0x3f3f3f3f #define max(a, b)(a > b ? a : b) #define min(a, b)(a < b ? a : b) #define N 110 int G , n; void Floyd() { int i, j, k; for(k = 1 ; k <= n ; k++) { for(i = 1 ; i <= n ; i++) { for(j = 1 ; j <= n ; j++) if(G[i][k] + G[k][j] < G[i][j]) G[i][j] = G[i][k] + G[k][j]; } } } int main() { int i, j, a, b, m, x; while(scanf("%d%d%d", &n, &a, &b) != EOF) { for(i = 1 ; i <= n ; i++) { for(j = 1 ; j <= n ; j++) { if(i == j) G[i][j] = 0; G[i][j] = INF; } } for(i = 1 ; i <= n ; i++) { scanf("%d", &m); int f = 1; while(m--) { scanf("%d", &x); if(f == 1) { G[i][x] = 0; f = 0; } else G[i][x] = 1; } } Floyd(); if(G[a][b] == INF) printf("-1\n"); else printf("%d\n", G[a][b]); } return 0; }
相关文章推荐
- php -- 对象遍历
- hdu 5288 OO’s Sequence(2015多校第一场第1题)枚举因子
- 工作日志 7.22
- 白名单/黑名单--名词解释
- 网友使用过程中的一个drools的复杂问题
- oracle 分区
- C函数与汇编函数之间参数及返回值传递方法
- KEYCODE列表
- .Net图片处理函数
- Hadoop 新 MapReduce 框架 Yarn 详解
- jquery 元素绑定on事件
- Heavy Transportation---poj1797
- ThemeManager主题切换(2)
- asp:Repeater中实现隔行换色
- 中国象棋游戏Chess(2) - 走棋
- Spring之五 事务管理
- Laravel5中生成指定文件的说明文档
- 中国象棋游戏Chess(2) - 走棋
- Hadoop YARN配置参数剖析(1)—RM与NM相关参数
- 生产排程甘特图应用及绘制步骤