import java.util.*; public class Main { public static int n, m; public static boolean ok(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); for(int id = 1; id <= T; id++) { int sx, sy, tx = 0, ty = 0; n = sc.nextInt(); m = sc.nextInt(); sx = sc.nextInt() - 1; sy = sc.nextInt() - 1; char[][] g = new char[n][]; int[][][] dis = new int[n][m][2]; for(int i = 0; i < n; i++) { g[i] = sc.next().toCharArray(); for(int j = 0; j < m; j++) { if(g[i][j] == 'E') { g[i][j] = '_'; tx = i; ty = j; } dis[i][j][0] = -1; dis[i][j][1] = -1; } } Queue<int[]> q = new LinkedList<>(); q.add(new int[]{sx, sy, 0}); dis[sx][sy][0] = 0; int[] dx = {0, 0, 1, -1}; int[] dy = {1, -1, 0, 0}; while(!q.isEmpty()) { int x = q.peek()[0]; int y = q.peek()[1]; int z = q.peek()[2]; q.poll(); for(int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if(!ok(nx, ny)) continue; if(g[nx][ny] == '_') { if(dis[nx][ny][z] == -1) { dis[nx][ny][z] = dis[x][y][z] + 1; q.add(new int[]{nx, ny, z}); } } else if(z == 0) { while(ok(nx, ny) && g[nx][ny] == 'X') { if(dis[nx][ny][1] == -1) { dis[nx][ny][1] = dis[x][y][0] + 1; q.add(new int[]{nx, ny, 1}); } nx += dx[i]; ny += dy[i]; } } } } int ans = -1; if(dis[tx][ty][0] != -1) ans = dis[tx][ty][0]; if(dis[tx][ty][1] != -1 && (ans == -1 || ans > dis[tx][ty][1])) ans = dis[tx][ty][1]; System.out.println("#" + id + " " + ans); } } }
时间: 2023-06-05 22:08:44 浏览: 138
该代码段是Java语言的代码,定义了一个名为Main的公共类,其中包括一个名为n、m的静态int变量和一个名为ok的静态boolean函数。此外,该代码还导入了Java的util库。函数ok的功能是判断一个x和y是否符合条件,当且仅当x大于等于0且y大于等于0时,返回值为true,否则为false。
相关问题
import java.util.*; public class CenterTree { public static final int N = 5; // 中心树加上最近的四个点一共有5个点 public static void main(String[] args) { // 从控制台读取中心点坐标 Scanner scanner = new Scanner(System.in); System.out.print("请输入中心点
的横坐标:"); int centerX = scanner.nextInt(); System.out.print("请输入中心点的纵坐标:"); int centerY = scanner.nextInt(); // 存储每个点的距离 double[] distances = new double[N]; // 从控制台读取每个点的坐标,并计算它们与中心点的距离 for (int i = 0; i < N; i++) { System.out.print("请输入第" + (i+1) + "个点的横坐标:"); int x = scanner.nextInt(); System.out.print("请输入第" + (i+1) + "个点的纵坐标:"); int y = scanner.nextInt(); distances[i] = Math.sqrt(Math.pow(x-centerX, 2) + Math.pow(y-centerY, 2)); } // 找到距离中心点最近的四个点的下标 int[] nearestIndices = new int[4]; for (int i = 0; i < 4; i++) { int nearestIndex = -1; double nearestDistance = Double.MAX_VALUE; for (int j = 0; j < N; j++) { if (distances[j] < nearestDistance && !isIndexUsed(j, nearestIndices)) { nearestIndex = j; nearestDistance = distances[j]; } } nearestIndices[i] = nearestIndex; } // 输出结果 System.out.print("中心树为中心点(" + centerX + "," + centerY + ")和最近的四个点:"); for (int i = 0; i < 4; i++) { int index = nearestIndices[i]; System.out.print("(" + index + "," + distances[index] + ") "); } } /** * 判断一个下标是否已经被使用 */ private static boolean isIndexUsed(int index, int[] indices) { for (int i = 0; i < indices.length; i++) { if (indices[i] == index) { return true; } } return false; } }
请问这段Java代码的作用是什么?
import java.util.*; import java.lang.*; public class Main{ public static void main(String[] args){ Scanner scanner =new Scanner(System.in); while(scanner.hasNext()){ int n=scanner.nextInt(); int a=0; for(int i=2;i<=n/2;i++){ if(SuShu(i)){ if(SuShu(n-i)){ a=i; } } } System.out.println(a); System.out.println(n-a); } } //判断质数的方法 public static boolean SuShu(int n){ for(int i=2;i<=Math.sqrt(n);i++){ if(n%i==0){ return false; } } return true; } }转为c语言代码
以下是将给定 Java 代码转换为 C 代码的结果:
```
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool SuShu(int n) {
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int a = 0;
for (int i = 2; i <= n / 2; i++) {
if (SuShu(i)) {
if (SuShu(n - i)) {
a = i;
}
}
}
printf("%d\n", a);
printf("%d\n", n - a);
}
return 0;
}
```
请注意,此代码已进行了以下更改:
1. 替换了 java.util 和 java.lang 包为 stdio.h 和 math.h 头文件。
2. 替换了 Scanner 输入操作为 scanf 函数。
3. 替换了 System.out.println 输出操作为 printf 函数。
4. 移除了 hasNext() 方法,使用 EOF 检查以停止循环。
5. 添加了 bool 类型和 true/false 值,并调整了判断质数的方法。
阅读全文