frogger.java

来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 112 行

JAVA
112
字号
package PKU.PRIM;
import java.util.*;
import java.math.*;

/**
 * ID:2253
 * PRIM
 * @author yhm
 * 
 */
public class Frogger {

	static int MAXNUM = Integer.MAX_VALUE;

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int caseNum = 1;
		while (cin.hasNext()) {
			int size = cin.nextInt();
			if (size == 0) {
				break;
			}
			int[][] xy = new int[size][2];
			for (int i = 0; i < size; i++) {
				xy[i][0] = cin.nextInt();
				xy[i][1] = cin.nextInt();
			}
			int[][] dis = new int[size][size];
			for (int i = 0; i < size; i++) {
				for (int j = 0; j < size; j++) {
					int x = xy[i][0] - xy[j][0];
					int y = xy[i][1] - xy[j][1];
					dis[i][j] = x * x + y * y;
				}
			}

			double r = prim(dis, size);
			/*
			 * String str = r+""; String[] str1 = new String[2]; str1[0] =
			 * str.substring(0, str.indexOf('.')); str1[1] =
			 * str.substring(str.indexOf('.')+1, str.length()); int len =
			 * str1[1].length(); if(len>3){ str1[1] = str1[1].substring(0, 3); }
			 * else{ for(int k=0;k<3-len;k++){ str1[1]+="0"; } }
			 * System.out.println("Scenario #"+caseNum); System.out.print("Frog
			 * Distance = "); System.out.println(str1[0]+"."+str1[1]);
			 * System.out.println();
			 */
			BigDecimal result = new BigDecimal(r);
			r = result.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
			String str = r + "";
			String[] str1 = new String[2];
			str1[0] = str.substring(0, str.indexOf('.'));
			str1[1] = str.substring(str.indexOf('.') + 1, str.length());
			int len = str1[1].length();
			for (int k = 0; k < 3 - len; k++) {
				str1[1] += "0";
			}
			str = str1[0] + "." + str1[1];
			System.out.println("Scenario #" + caseNum);
			System.out.print("Frog Distance = ");
			System.out.println(str);
			System.out.println();
			caseNum++;
		}

	}

	static double prim(int[][] dis, int size) {
		int result = 0, min = MAXNUM, minIndex = 0;
		int[] low = new int[size];
		boolean[] inS = new boolean[size];
		for (int i = 0; i < size; i++) {
			low[i] = dis[0][i];
			inS[i] = false;
		}
		low[0] = 0;
		inS[0] = true;

		for (int i = 1; i < size; i++) {
			min = MAXNUM;
			for (int j = 1; j < size; j++) {
				if (!inS[j] && low[j] < min) {
					min = low[j];
					minIndex = j;
				}
			}

			result = Math.max(result, min);

			if (minIndex == 1) {
				break;
			}
			low[minIndex] = 0;
			inS[minIndex] = true;
			for (int j = 1; j < size; j++) {
				if (!inS[j] && dis[minIndex][j] < low[j]
						&& dis[minIndex][j] != MAXNUM) {
					low[j] = dis[minIndex][j];
				}
			}

		}

		return Math.sqrt(result);

	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?