题目
这题挺简单就是常见的深搜模板题。深搜+递归
思路;
用深搜遍历每个位置,如果是‘@’就在用深搜查找附近8个方向的量,如果遇到‘*’就返回。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int lei=0;//用于存储目标
char leiqu[103][103];//用于储存输入数
int n,m;
void dfs(int i,int j)//深搜函数
{
if(leiqu[i][j]=='*')
{
return;
}//如果遇到‘*’就返回
leiqu[i][j]='*';//将遍遍历过的位置标记
//接下来搜其他七个方向
if(leiqu[i-1][j-1]=='@')dfs(i-1,j-1);
if(leiqu[i-1][j]=='@')dfs(i-1,j);
if(leiqu[i-1][j+1]=='@')dfs(i-1,j+1);
if(leiqu[i][j-1]=='@')dfs(i,j-1);
if(leiqu[i][j+1]=='@')dfs(i,j+1);
if(leiqu[i+1][j-1]=='@')dfs(i+1,j-1);
if(leiqu[i+1][j]=='@')dfs(i+1,j);
if(leiqu[i+1][j+1]=='@')dfs(i+1,j+1);
}
int main()
{
memset(leiqu,'*',sizeof(leiqu));//给数组赋初始值
cin>>n>>m;
while(m!=0){
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>leiqu[i][j];
}//输入
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
{
if(leiqu[i][j]=='@')//找到’@‘时开始深搜
{
lei++;//找到一个雷区+1;
dfs(i,j);//调用函数
}
}
cout<<lei<<endl;输出
cin>>n>>m;
lei=0;//新循环重新复制
}
return 0;
}