1 条题解
-
0
自动搬运
来自洛谷,原作者为

Dying_Light
**搬运于
2025-08-24 21:40:16,当前版本为作者最后更新于2017-12-09 07:57:02,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
蒟蒻第一篇题解跪求过~~~~~~
这个题目有一些注意的地方:
1.方向是八联通,可以用这种双重循环实现
for(int dy=-1;dy<=1;dy++){
for(int dx=-1;dx<=1;dx++){ int nx=dx+x,ny=dy+y;2.必须注意不越界,这在双重循环中进行判断
3.只搜索是空的地方
这道题用循环遍历所有的点,并在这些所有的点上进行深搜,搜索附近八个方向上有没有雷,如果有自身+1;
#######-----分割线-----#######
下面附上代码:
#include<iostream> using namespace std; int n,m; char juzhen[101][101];//需要用字符类型 void dfs(int y,int x){//需要返回空类型,定义void函数 if(juzhen[y][x]=='0'){ for(int dy=-1;dy<=1;dy++){ for(int dx=-1;dx<=1;dx++){ int nx=dx+x,ny=dy+y; if(0<=ny&&ny<n&&0<=nx&&nx<m&&juzhen[ny][nx]=='*')//八连通循环 ,且必须不越界 juzhen[y][x]+=1;//如果是雷的话将那一个点加1 } } } return;//将那个点加完之后就返回继续找下一个点 } int main(){ cin>>n>>m;//不必多说 for(int i=0;i<n;i++) for(int j=0;j<m;j++){ cin>>juzhen[i][j];//循环输入 if(juzhen[i][j]=='?') juzhen[i][j]='0';//将?转成0,方便之后+1 } for(int i=0;i<n;i++) for(int j=0;j<m;j++) dfs(i,j);//遍历每一个点进行深搜 for(int i=0;i<n;i++){ for(int j=0;j<m;j++) cout<<juzhen[i][j];//按序输出每一个点 cout<<endl; } return 0;//OK }
- 1
信息
- ID
- 1717
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者