做ACM题最大的困难不是不会敲代码!而是理解题意!
看了很多人的帖子,才明白过来是什么意思!
我再说一下我的理解:求出所有1到2的所有通路,每条通路都有一个最大的子路径,这些子路径中最小的那个就是所求的值!
这是一个无向图,每个顶点都是两两连通的,所以在建图的时候,邻接矩阵的时候只有对角线为0。
我用的是Floyd算法,进行的!
下面看代码:
/*题目大意,有两只青蛙,分别在两个石头上,青蛙A想要到青蛙B那儿去,他可以直接跳到B的石头上,
* 也可以跳到其他石头上,再从其他石头跳到B那儿,求青蛙从A到B的所有路径中最小的Frog Distance,
* 我们定义Frog Distance为从A到B的一条路径中所跳的最大距离,例如,如果从A到B某条路径跳的距离是2,5,6,4,
* 则Frog Distance就是6,题目输入的第一行代表石头的个数,当个数为0时结束程序,接着有n行,
* 其中第2,3行分别代表A,B青蛙的坐标,其他n-2行分别代表空的石头的坐标,输出一个小数(保留三位),
* 具体格式参见样例,注意没输出一个答案还要再空一行。
题目数据1很明显为5.000
对于数据2青蛙有两种方案
方案1:1-2则经过距离为2.000故此时Frog Distance=2.000
方案2:1-3-2 则经过距离分别是1.414 1.414 故此时Frog Distance=1.414
故所求的最小的Frog Distance=1.414
*/
import java.io.BufferedInputStream;
import java.util.Scanner;
public class POJ2253 {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n;
int cases;
int stone[][];
double map[][];
public void inPut() {
while (true) {
cases++;
n = sc.nextInt();
if (n == 0) {
return;
}
stone = new int[n][2];
map = new double[n][n];
for (int i = 0; i < n; i++) {
stone[i][0] = sc.nextInt();
stone[i][1] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
map[i][j] = Math.sqrt((stone[i][0] - stone[j][0])
* (stone[i][0] - stone[j][0])
+ (stone[i][1] - stone[j][1])
* (stone[i][1] - stone[j][1]));
}
}
solve();
}
}
private void solve() {
// TODO 自动生成的方法存根
System.out.println("Scenario #" + cases);
System.out.printf("Frog Distance = %.3f\n\n", floyd());
}
private double floyd() {
// TODO 自动生成的方法存根
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] > ( map[i][k] > map[k][j] ? map[i][k]
: map[k][j] ) &&
map[i][k] != 0 &&
map[k][j] != 0) {
map[i][j] = (map[i][k] > map[k][j] ? map[i][k]
: map[k][j]);
}
}
}
}
return map[0][1];
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new POJ2253().inPut();
}
}
测试数据:
2
00
34
3
174
194
185
8
11
40
12
22
32
42
30
51
3
910
1010
10010
6
55
100100
44
33
22
11
5
12
21
32
41
52
3
999999
11
33
0
输出结果:
Scenario #1
Frog Distance =5.000
Scenario #2
Frog Distance =1.414
Scenario #3
Frog Distance =1.414
Scenario #4
Frog Distance =1.000
Scenario #5
Frog Distance =134.350
Scenario #6
Frog Distance =1.414
Scenario #7
Frog Distance =1408.557