public class Minesweeper {
public static void main
(String[] args
) { double p
= Double.
parseDouble(args
[2]);
// game grid is [1..m][1..n], border is used to handle boundary cases
boolean[][] bombs = new boolean[m+2][n+2];
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
bombs
[i
][j
] = (Math.
random() < p
);
// print game
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++)
if (bombs
[i
][j
]) System.
out.
print("* "); }
// sol[i][j] = # bombs adjacent to cell (i, j)
int[][] sol = new int[m+2][n+2];
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
// (ii, jj) indexes neighboring cells
for (int ii = i - 1; ii <= i + 1; ii++)
for (int jj = j - 1; jj <= j + 1; jj++)
if (bombs[ii][jj]) sol[i][j]++;
// print solution
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (bombs
[i
][j
]) System.
out.
print("* "); else System.
out.
print(sol
[i
][j
] + " "); }
}
}
}
cHVibGljIGNsYXNzIE1pbmVzd2VlcGVyIHsgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7IAogICAgICAgIGludCBtID0gSW50ZWdlci5wYXJzZUludChhcmdzWzBdKTsKICAgICAgICBpbnQgbiA9IEludGVnZXIucGFyc2VJbnQoYXJnc1sxXSk7CiAgICAgICAgZG91YmxlIHAgPSBEb3VibGUucGFyc2VEb3VibGUoYXJnc1syXSk7CiAgICAgIAogICAgICAgIC8vIGdhbWUgZ3JpZCBpcyBbMS4ubV1bMS4ubl0sIGJvcmRlciBpcyB1c2VkIHRvIGhhbmRsZSBib3VuZGFyeSBjYXNlcwogICAgICAgIGJvb2xlYW5bXVtdIGJvbWJzID0gbmV3IGJvb2xlYW5bbSsyXVtuKzJdOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKQogICAgICAgICAgICAgICAgYm9tYnNbaV1bal0gPSAoTWF0aC5yYW5kb20oKSA8IHApOwoKICAgICAgICAvLyBwcmludCBnYW1lCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykKICAgICAgICAgICAgICAgIGlmIChib21ic1tpXVtqXSkgU3lzdGVtLm91dC5wcmludCgiKiAiKTsKICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiLiAiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBzb2xbaV1bal0gPSAjIGJvbWJzIGFkamFjZW50IHRvIGNlbGwgKGksIGopCiAgICAgICAgaW50W11bXSBzb2wgPSBuZXcgaW50W20rMl1bbisyXTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspCiAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykKICAgICAgICAgICAgICAgIC8vIChpaSwgamopIGluZGV4ZXMgbmVpZ2hib3JpbmcgY2VsbHMKICAgICAgICAgICAgICAgIGZvciAoaW50IGlpID0gaSAtIDE7IGlpIDw9IGkgKyAxOyBpaSsrKQogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGpqID0gaiAtIDE7IGpqIDw9IGogKyAxOyBqaisrKQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9tYnNbaWldW2pqXSkgc29sW2ldW2pdKys7CgogICAgICAgIC8vIHByaW50IHNvbHV0aW9uCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICAgICAgaWYgKGJvbWJzW2ldW2pdKSBTeXN0ZW0ub3V0LnByaW50KCIqICIpOwogICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHNvbFtpXVtqXSArICIgIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgfQoKICAgIH0KfQo=