我是真的发现“会者不难,难者不会”这句话是真的正确。
我五分钟敲完代码一遍AC,可是我刚刚放弃的那道题做了一天都没做出来。
好伤啊兄弟。
一年以前我觉得dfs好难,现在看来像1+1==2差不多……
时间啊时间,你让我头发掉了好多啊!
思路:搜索到 ‘@’ 就把它所在的位置置为 ' * ',这也算是记录走过的路径。
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e2+5;
int dir[8][2]={1,0,0,1,-1,0,0,-1,1,-1,-1,1,1,1,-1,-1};
char mp[maxn][maxn];
int n,m;
void dfs(int x,int y){
mp[x][y]='*';
for(int i=0;i<8;i++){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(xx>=0&&x<n&&yy>=0&&yy<m&&mp[xx][yy]=='@'){
dfs(xx,yy);
}
}
}
int main(){
while(cin>>n>>m,n&&m){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>mp[i][j];
}
}
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mp[i][j]=='@'){
dfs(i,j);
cnt++;
}
}
}
cout<<cnt<<endl;
}
}