Algorithm uva 10189扫雷艇

Algorithm uva 10189扫雷艇,algorithm,Algorithm,以下是问题的链接: 这是我的代码,它工作得非常完美;然而,每当我提交它时,它给出了错误的答案。有人知道为什么吗 注意:我用两个额外的行和列填充矩阵,这样当我检查第一列的左侧或最后一行的底部时,就不会出现错误 public class Main { public void convert(char[][] maze, int fieldNum) { if (fieldNum != 1) System.out.println(); System.out.println

以下是问题的链接:

这是我的代码,它工作得非常完美;然而,每当我提交它时,它给出了错误的答案。有人知道为什么吗

注意:我用两个额外的行和列填充矩阵,这样当我检查第一列的左侧或最后一行的底部时,就不会出现错误

public class Main {
public void convert(char[][] maze, int fieldNum) {
    if (fieldNum != 1)
        System.out.println();
    System.out.println("Field #" + fieldNum + ":");
    int n = maze.length;
    int m = maze[0].length;
    char[][] result = new char[n][];
    for (int i = 0; i < n; i++) {
        result[i] = new char[m];
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            result[i][j] = '0';
        }
    }
    for (int i = 1; i < n - 1; i++) {
        for (int j = 1; j < m - 1; j++) {
            if (maze[i][j] == '*') {
            this.fill(result, i, j);
        }
        }
    }
    for (int i = 1; i < n - 1; i++) {
        for (int j = 1; j < m - 1; j++) {
            System.out.print(result[i][j]);
        }
        System.out.println();
    }
}
private void fill(char[][] maze, int i, int j) {
    if (maze[i-1][j-1] != '*')
        maze[i-1][j-1] += 1;
    if (maze[i][j-1] != '*')
        maze[i][j-1] += 1;
    if (maze[i+1][j-1] != '*')
        maze[i+1][j-1] += 1;
    if (maze[i-1][j] != '*')
        maze[i-1][j] += 1;
    maze[i][j] = '*';
    if (maze[i+1][j] != '*')
        maze[i+1][j] += 1;
    if (maze[i-1][j+1] != '*')
        maze[i-1][j+1] += 1;
    if (maze[i][j+1] != '*')
        maze[i][j+1] += 1;
    if (maze[i+1][j+1] != '*')
        maze[i+1][j+1] += 1;
}
public static void main(String[] args) throws IOException {
    Main sweeper = new Main(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    int fieldNum = 1;
    while ((line = reader.readLine()) != null) {
        String[] xy = line.trim().split("\\s+");
        int n = Integer.parseInt(xy[0]);
        int m = Integer.parseInt(xy[1]);
        if (n == 0 && m == 0)
            break;
        n += 2;
        m += 2;
        char[][] maze = new char[n][];
        for (int i = 0; i < n; i++) {
            maze[i] = new char[m];
        }
        for (int i = 1; i < n - 1; i++) {
            line = reader.readLine();
            for (int j = 1; j < n - 1; j++) {
                maze[i][j] = line.charAt(j - 1);
            }
        }
        sweeper.convert(maze, fieldNum);
        fieldNum++;
    }
}
公共类主{
公共void转换(char[][]迷宫,int fieldNum){
如果(fieldNum!=1)
System.out.println();
System.out.println(“Field#“+fieldNum+”:”;
int n=迷宫长度;
int m=迷宫[0]。长度;
字符[][]结果=新字符[n][];
对于(int i=0;i

}

您可以使用为UVa问题的给定输入生成输出,并与您的解决方案进行比较,而不是告诉其他人调试长代码。它支持大约1500个问题。

同样的问题,扫雷舰,也在URL上

如果出现“表示错误”,请确保输出中的空行仅在字段#n和字段#n+1之间。前后不应有空行

下面是如何在bash中显示提供的“示例输出”:

$ java Main <input
Field #1:
*100
2210
1*10
1110

Field #2:
**100
33200
1*100
$ 

$javamain如果它给了你一个错误的答案,那么它就不能正常工作。另外,人们不会为你调试代码——你有一个你认为可以在这里回答的特定问题吗?我不知道为什么uva会给出RE,但编程挑战会给出WA。@simchona,RE=运行时错误,WA=错误答案。