蓝桥杯—扫雷(C语言解法)

题目描述

点击查看原题

思路

  1. 两个数组,一个存储读入的数据start,一个存储结果res
  2. 遍历start数组,为1,把res数组中此时所在的点设置为9,将它周围的8个方向的非雷点的res数组的值加1(即周围的雷的数量)

代码

#include<stdio.h>
int start[110][110];
int res[110][110];
int main(){
	int n,m;
	int i,j,x1,y1,x2,y2;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			scanf("%d",&start[i][j]);
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(start[i][j]){
				res[i][j]=9;
				x1=i+1;x2=i-1;
				y1=j+1;y2=j-1;
				if(x1>0 && x1<=n && !start[x1][j]) res[x1][j]+=1; 
				if(x2>0 && x2<=n && !start[x2][j]) res[x2][j]+=1;
				if(y1>0 && y1<=m && !start[i][y1]) res[i][y1]+=1;/**/
				if(y2>0 && y2<=m && !start[i][y2]) res[i][y2]+=1;
				if(x1>0 && x1<=n && y1>0 && y1<=m && !start[x1][y1]) res[x1][y1]+=1;
				if(x1>0 && x1<=n && y2>0 && y2<=m && !start[x1][y2]) res[x1][y2]+=1;
				if(x2>0 && x2<=n && y1>0 && y1<=m && !start[x2][y1]) res[x2][y1]+=1;
				if(x2>0 && x2<=n && y2>0 && y2<=m && !start[x2][y2]) res[x2][y2]+=1;
			}
		}
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			printf("%d ",res[i][j]);
		}
		printf("\n");
	}
	return 0;
}
posted @ 2022-04-03 17:28  两颗不一样的西柚  阅读(270)  评论(0)    收藏  举报