小M最近爱上了扫雷游戏,就是在一个n*m的区域中,有地雷,每一个方格上都有一个数字s,表示在这个方格周围有s颗雷,现在给你一张表明地雷的图,并且指定一个位置点开,请输出点开后的数字情况,若点开的地方的数字为0,则向该方格周围扩展,直到遇到数字或者地图边界为止,若点开的地方为地雷,那么直接输出"GG"。
周围指的是上,左上,左,左下,下,右下,右,右上八个方向。
小M最近爱上了扫雷游戏,就是在一个n*m的区域中,有地雷,每一个方格上都有一个数字s,表示在这个方格周围有s颗雷,现在给你一张表明地雷的图,并且指定一个位置点开,请输出点开后的数字情况,若点开的地方的数字为0,则向该方格周围扩展,直到遇到数字或者地图边界为止,若点开的地方为地雷,那么直接输出"GG"。
周围指的是上,左上,左,左下,下,右下,右,右上八个方向。
第一行有两个数字n和m(2<=n,m<=1000),表示地图的大小,第二行有两个整数x和y(1<=x<=n,1<=y<=m),表示点击第x行y列的方格,接下来的是一个n行m列的一个矩阵,表示地图,其中.表示空地,*表示地雷。
如果点开的地方为地雷直接输出"GG"。否则输出点击指定位置后的地图,"."表示未点开的空地,"*"表示地雷,数字表示在该方格周围的地雷数目。
3 4 1 1 .... ..*. ....
01.. 01*. 01..
需要注意的是,输出结果时,最好一次输出,否则很容易超时。 import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int m=sc.nextInt(); int x=sc.nextInt()-1; int y=sc.nextInt()-1; char[][] arr=new char[n][m]; for(int i=0;i<n;i++){ arr[i]=sc.next().toCharArray(); } if(arr[x][y]=='*') { System.out.println("GG"); }else { List<Point> list=new ArrayList<>(); arr[x][y]=getBomb(arr,x,y); list.add(new Point(x,y)); while(list.size()>0) { click(arr,list) ; } StringBuilder sb=new StringBuilder(); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { sb.append(arr[i][j]); } sb.append("\n"); } System.out.println(sb.toString()); } } sc.close(); } private static void click(char[][] arr,List<Point> list) { Point p=list.remove(0); int x=p.getX(); int y=p.getY(); if(arr[x][y]!='0') return; for(int i=x-1;i<=x+1;i++) { if(i<0||i>=arr.length) continue; for(int j=y-1;j<=y+1;j++) { if(j<0||j>=arr[0].length||(i==x&&j==y)) continue; if(arr[i][j]=='.') { arr[i][j]=getBomb(arr,i,j); list.add(new Point(i,j)); } } } } private static char getBomb(char[][] arr,int x,int y) { int count=0; for(int i=x-1;i<=x+1;i++) { if(i<0||i>=arr.length) continue; for(int j=y-1;j<=y+1;j++) { if(j<0||j>=arr[0].length) continue; if(arr[i][j]=='*') { count++; } } } return Character.forDigit(count, 10); } } class Point{ private int x; private int y; public Point(int x,int y) { this.x=x; this.y=y; } public int getX() { return x; } public int getY() { return y; } }