25行解决!全部AC
2025-03-16 10:28:01
发布于:上海
8阅读
0回复
0点赞
代码如下
#include<bits/stdc++.h>
using namespace std;
int h,w,x2,y2,b[25][25],cnt=0;
char a[25][25];
void s(int x,int y){
if(b[x][y]==1)return ;
else cnt++,b[x][y]=1;
if(x>h||x<1||y>w||y<1)return ;
if(a[x+1][y]=='.')s(x+1,y);
if(a[x-1][y]=='.')s(x-1,y);
if(a[x][y+1]=='.')s(x,y+1);
if(a[x][y-1]=='.')s(x,y-1);
}
int main(){
cin>>w>>h;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
if(a[i][j]=='@')x2=i,y2=j;
}
}
s(x2,y2);
cout<<cnt;
return 0;
}
深度优先搜索=递归
要点:
1.在递归时提前判断上下左右方向是否能走,而不是直接递归。这样可以提高效率,节省时间
2.在计数时要用一个数组来判断是否已经走过,走过就结束,没走过就计数(并记录为走过)
这里空空如也
有帮助,赞一个