2010/01/27

p001 Minesweeper

/**
 * Time(ZeroJudge): 68 ms
 * Date: 2010-01-28
 * 
 * @author Kurorido
 */

import java.util.Scanner;

public class JAVA {

    public static void main(String[] args) {
        
        boolean debug = false;
        
        Scanner sc = new Scanner(System.in);
        
        int fieldCount = 1;
        
        while(sc.hasNext()) {
        
            // get row & col
            int row = sc.nextInt();
            int col = sc.nextInt();
        
            if(row == 0 && col == 0)
                System.exit(0);
            
            // make field
            char[][] field = new char[row][col];

            //StringBuffer field = new StringBuffer();
            
            // read then make field
            for(int i = 0; i < row; i++) {
                //field.append(sc.next() + "\n");
                String tmp = sc.next();
                for(int j = 0; j < tmp.length(); j++) {
                    field[i][j] = tmp.charAt(j); 
                }
            }
            
            // field debug
            if(debug)
                for(int i = 0; i < field.length; i++) {
                    for(int j = 0; j < field[i].length; j++) {
                        System.out.print(field[i][j]);
                    }
                    System.out.println();
                }
            
            // output
            StringBuffer output = new StringBuffer();
            
            output.append("Field #" + fieldCount++ + ":\n");
            
            for(int i = 0; i < row; i++) {
                for(int j = 0; j < col; j++) {
                    // if mine
                    if(field[i][j] == '*') {
                        output.append('*');
                    } // if not mine, count value
                    else {
                        int value = 0;
                        // left-top
                        if(i-1 > -1 && j-1 > -1)
                            if(field[i-1][j-1] == '*')
                                value++;
                        
                        // top
                        if(i-1 > -1)
                            if(field[i-1][j] == '*')
                                value++;
                        
                        // right-top
                        if(i-1 > -1 && j+1 < col)
                            if(field[i-1][j+1] == '*')
                                value++;
                        // left
                        if(j-1 > -1)
                            if(field[i][j-1] == '*')
                                value++;                        
                        // right
                        if(j+1 < col)
                            if(field[i][j+1] == '*')
                                value++;
                        
                        // left-down
                        if(i+1 < row && j-1 > -1)
                            if(field[i+1][j-1] == '*')
                                value++;
                        
                        // down
                        if(i+1 < row)
                            if(field[i+1][j] == '*')
                                value++;
                        
                        // right-down
                        if(i+1 < row && j+1 < col)
                            if(field[i+1][j+1] == '*')
                                value++;
                        
                        output.append(value);
                    }
                }
                output.append('\n');
            }
            
            System.out.println(new String(output));
        }
    }
}


含Debug版,可以將讀入的踩地雷盤印出,只要將debug變數改為true即可。

No comments:

Post a Comment