一.题目
分析:就是扫雷游戏规则,很简单的一道bfs题目,将地雷入队搜索周围就行,需要注意的是,要先将地雷的数值初始化为比最大数据加1的值,要不然会和地雷数量重复,处理起来优点麻烦
import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
//对应8个位置的方向向量
public static int[] dx = {0,1,0,-1,1,1,-1,-1};
public static int[] dy = {1,0,-1,0,1,-1,-1,1};
static class pair{
int x;
int y;
public pair(int x,int y)
{
this.x = x;
this.y = y;
}
}
public static Queue<pair> queue = new LinkedList<pair>();
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int m = scan.nextInt();
int[][] map = new int[n][m];
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
map[i][j] = scan.nextInt();
if(map[i][j]==1)
{
map[i][j] = 10001;
queue.add(new pair(i,j));
}
}
}
bfs(map);
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
if(map[i][j]==10001)
map[i][j] = 9;
}
}
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
System.out.print(map[i][j]+" ");
}
System.out.println();
}
scan.close();
}
public static void bfs(int[][] map)
{
while(!queue.isEmpty())
{
pair top = queue.poll();//出队
for(int i = 0;i<8;i++)
{
int xx = top.x + dx[i];
int yy = top.y + dy[i];
if(cheak(xx,yy,map))
{
map[xx][yy]++;
}
}
}
}
public static boolean cheak(int x,int y,int[][] map)
{
if(x>=0&&x<map.length&&y>=0&&y<map[0].length&&map[x][y]!=10001)
return true;
return false;
}
}