POJ 1847 - Tram
2017-09-06 16:03
337 查看
题目大意:有N个开关,第i个开关就是将第i条路转向其他路的开关。要从A到B,最少需要转几次开关。每一个开关输出第一个数K,表示这个开关可以转向K条路,第一条不需要转开关,其他的K-1条都需要转一次开关才能转换到。
解题思路:数据量小,用floyd,每个开关的第一条路,权值为0,其他权值为1。最后输出A到B的最小权值即可,如果没有这样的一种方式,也就是A到B的权值为初始化的inf,则输出-1。
ac代码:
解题思路:数据量小,用floyd,每个开关的第一条路,权值为0,其他权值为1。最后输出A到B的最小权值即可,如果没有这样的一种方式,也就是A到B的权值为初始化的inf,则输出-1。
ac代码:
#include <iostream> #include <cmath> #define inf 105 using namespace std; int n, A, B, w[105][105], t1, t2; int main() { while (scanf("%d%d%d", &n, &A, &B)!=EOF){ for (int i=1; i<=n; i++){ for (int j=1; j<=n; j++) w[i][j] = inf; w[i][i] = 0; } for (int i=1; i<=n; i++){ scanf("%d", &t1); for (int j=0; j<t1; j++){ scanf("%d", &t2); if (!j) w[i][t2] = 0; else w[i][t2] = min(w[i][t2], 1); } } for (int k=1; k<=n; k++) for (int i=1; i<=n; i++) for (int j=1; j<=n; j++) w[i][j] = min(w[i][j], w[i][k]+w[k][j]); if (w[A][B] >= inf) printf("-1\n"); else printf("%d\n", w[A][B]); } return 0; }
相关文章推荐
- POJ-1847 Tram
- POJ 1847:Tram
- POJ ~ 1847 ~ Tram (Dijkstra)
- 最短路练习13/poj/1847 / Tram/floyd解法;memset用0x3f初始化详解
- POJ 1847 Tram 笔记
- POJ 1847:Tram
- poj 1847:Tram
- poj 1847 Tram 【最短路 dijkstra + floyd + spfa】
- POJ-1847 Tram (dijkstra算法)
- POJ 1847 Tram 【最短路,spfa算法,题意理解是关键呀!!】
- POJ 1847 Tram --set实现最短路SPFA
- POJ-1847-Tram(裸迪杰斯特拉或弗洛伊德)
- POJ 1847 Tram 最短路
- poj-1847 Tram 最短路
- poj——1847——Tram
- poj 1847 Tram (最短路)
- poj1847——Tram
- poj1847 Tram
- POJ 1847 Tram(简单最短路之Floyd)
- POJ-1847 Tram