@[1004779564bzbjj](/user/465055)
~~好臭的数组~~
回溯搜索啥的建议用函数
整体思路和你这个差不多,枚举每一个位置,用深搜去搜,能不能到无风区
但我属实没看懂你这种……~~递推式回溯~~(瞎编的别在意
你试试用递归?
by Max6700 @ 2023-07-28 12:04:45
~~毫无逻辑性的一段话[啸]~~
by Max6700 @ 2023-07-28 12:08:02
~~不小心mle了~~
by Max6700 @ 2023-07-28 12:21:45
~~然后tle~~
by Max6700 @ 2023-07-28 12:23:16
emm……确实可以倒推,从无风的地方开始搜,会优化有点[恍然大雾]
by Max6700 @ 2023-07-28 12:27:53
```
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[1010][1010];//地图
bool v[1010][1010];//标记
long long cnt;//总数,应该不会爆,习惯
void dfs(int x,int y)//深搜
{
if(!(x>=1 && x<=n && y>=1 && y<=m))//越界
return ;
v[x][y]=1;
if(a[x][y-1]=='r')dfs(x,y-1);//右(倒推,反着)
if(a[x][y+1]=='l')dfs(x,y+1);//左(倒推,反着)
if(a[x+1][y]=='u')dfs(x+1,y);//上(倒推,反着)
if(a[x-1][y]=='d')dfs(x-1,y);//下(倒推,反着)
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]=='o')
dfs(i,j);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(v[i][j])//能走,总数+1
cnt++;
cout<<cnt;
return 0;
}
```
~~难看的码风~~
by Max6700 @ 2023-07-28 12:32:59