@[shooting__star](/user/955954) dfs爆搜,你,值得拥有(
```
#include<bits/stdc++.h>
using namespace std;
int cnt;
int h,w;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
char c;
int a[1000][1000];
bool v[1000][1000];
void dfs(int x,int y)
{
if(x>h || x<1 || y>w || y<1 || v[x][y] || a[x][y]==0)
return ;
v[x][y]=1;
cnt++;
for(int i=0;i<4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
dfs(nx,ny);
}
}
int main(){
int x1,y1;
cin>>w>>h;
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++)
{
cin>>c;
if(c=='.')
a[i][j]=1;
else if(c=='@')
{x1=i;y1=j;a[i][j]=1;}
}
dfs(x1,y1);
cout<<cnt;
return 0;
}
```
by Min6700 @ 2023-12-15 22:35:52
@[Min6700](/user/1175064) 。。。。。。
by shooting__star @ 2023-12-15 22:37:22
@[shooting__star](/user/955954) ~~能过就刑()~~
by Min6700 @ 2023-12-15 22:47:36
@[Min6700](/user/1175064) 你6,你刑
by shooting__star @ 2023-12-15 22:48:40
过了 $n$ 天……
```cpp
#include<bits/stdc++.h>
using namespace std;
int w,h;
char mp[25][25];
int maxx;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int sx,sy;
int vis[25][25];
void dfs(int x,int y,int step)
{
maxx=max(maxx,step);
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>0&&yy>0&&xx<=w&&yy<=h&&mp[xx][yy]=='.'&&vis[xx][yy]==0)
{
vis[xx][yy]=1;
dfs(xx,yy,step+1);
vis[xx][yy]=0;
}
}
}
int main()
{
cin>>w>>h;
for(int i=1;i<w;i++)
{
for(int j=1;j<h;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='@')
{
sx=i;
sy=j;
}
}
}
vis[sx][sy]=1;
dfs(sx,sy,0);
cout<<maxx;
return 0;
}
```
得,样例还给我一个 $7$
by shooting__star @ 2024-02-28 21:29:30
谢谢你,让我多 AC 了一道水题。
你题目理解错了!这个题的意思是从 `@` 出发能到达多少个点,不是你最远能走多远。
所以为什么题解里的代码里有 `dfs` 也有 `bfs` 。
by Niubi114514 @ 2024-02-28 22:09:20
```cpp
#include<bits/stdc++.h>
using namespace std;
int w,h;
char mp[25][25];
int maxx;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int sx,sy;
int vis[25][25];
void dfs(int x,int y,int step)
{
maxx=max(maxx,step);
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>0&&yy>0&&xx<=w&&yy<=h&&mp[xx][yy]=='.')
{
vis[xx][yy]=1;
if(vis[xx][yy]==0)
dfs(xx,yy,step+1);
else
dfs(xx,yy,step);
vis[xx][yy]=0;
}
}
}
int main()
{
cin>>w>>h;
for(int i=1;i<w;i++)
{
for(int j=1;j<h;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='@')
{
sx=i;
sy=j;
}
}
}
vis[sx][sy]=1;
dfs(sx,sy,0);
cout<<maxx;
return 0;
}
```
so?
by shooting__star @ 2024-02-28 22:42:46