sicily 5144 catch the thief
2015-01-10 16:16
274 查看
题目见 http://soj.sysu.edu.cn/show_problem.php?pid=5144
大意:
小偷要从城市1到城市n,给出n个城市的距离矩阵,已知小偷会选择最短路逃跑,问小偷有可能经过几个城市?
思路:
这个问题是多条最短路的问题,要找出所有最短路上的点。可以从起点S和终点T分别求一次最短路,结果分别用dist1[]数组和dist2[] 数组表示。 如果dist1[i] + dist2[i] == dist1[T] (即最短路的长度),那么i点在最短路上。
后来发现这道题目数据数据大小n没给,实际测试发现n出比较小,可以用floyed算法3重循环过。算法思路类似,求出所以点间的距离d[][],然后循环j判断d[0][j] + d[j][n-1] == d[0][n-1]是否成立,若成立则点在最短路上。
因为之前做类似题目较少,所以总结记录下。
floyed代码如下:
大意:
小偷要从城市1到城市n,给出n个城市的距离矩阵,已知小偷会选择最短路逃跑,问小偷有可能经过几个城市?
思路:
这个问题是多条最短路的问题,要找出所有最短路上的点。可以从起点S和终点T分别求一次最短路,结果分别用dist1[]数组和dist2[] 数组表示。 如果dist1[i] + dist2[i] == dist1[T] (即最短路的长度),那么i点在最短路上。
后来发现这道题目数据数据大小n没给,实际测试发现n出比较小,可以用floyed算法3重循环过。算法思路类似,求出所以点间的距离d[][],然后循环j判断d[0][j] + d[j][n-1] == d[0][n-1]是否成立,若成立则点在最短路上。
因为之前做类似题目较少,所以总结记录下。
floyed代码如下:
// Problem#: 5144 // Submission#: 3517043 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/ // All Copyright reserved by Informatic Lab of Sun Yat-sen University #include <bits/stdc++.h> using namespace std; map<int,int> v; int n,m; int maxd = 1000000000; int mm[1010][1010]; int d[1010][1010]; void floyed(){ memcpy(d,mm,sizeof(mm)); for(int i=0;i<n;i++){ for(int j =0;j<n;j++){ for(int k =0;k<n;k++){ if(d[j][k] > d[j][i]+d[i][k]){ // 经过i中转 d[j][k] = d[j][i]+d[i][k]; } } } } } int main(){ while(cin >> n&&n){ memset(mm,0,sizeof(mm)); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin >> mm[i][j]; if(mm[i][j]==-1) mm[i][j] = maxd; } } floyed(); int ans = 2; for (int j=1;j<n-1;j++) if (d[0][j]+d[j][n-1]==d[0][n-1]) // 循环判断每个点是否在最短路上 ans++; cout << ans << endl; } return 0; }
相关文章推荐
- <Sicily>Catch the thief
- sicily Catch the thief
- ZOJ 2864 Catch the thief
- hdu catch the thief
- ZOJ 2864 Catch the thief(多条最短路+BFS)
- zoj 2864 Catch the thief
- sicily 1063 Who's the boss
- Sicily 1203. The Cubic End(数论乘法)
- Sicily 1120. Walk Through the For
- Sicily 1636. Show me the money
- How to Hook the Mouse to Catch Events Outside of your application
- Sicily 1401. Children of the Candy Corn
- hdu3870-Catch the Theves(平面图最小割)
- Sicily 4469. Find the Ball
- HDU-3870-Catch the Theves
- 平面图s-t最小割 HDU 3870 Catch the Theves
- toj2825 catch the cow BFS典型题
- HDU 3870 Catch the Theves 【平面图最小割转最短路问题】
- Sicily 13858. Goldilocks and the N Cows
- sicily 1636. show me the money