2 条题解
-
-1
这道题非常的水啊
首先搜索 maijiajun 可以走的格子。
然后在这些格子里面再去枚举每一个格子放炸弹能炸死多少个僵尸。
最后取一个最大值这道题就做完了
#include<iostream> using namespace std; int n,m,ax,ay; char a[101][101]; bool vis[109][109]; void dfs(int x,int y){//搜索maijiajun可以走的地方 const int dx[]={0,0,-1,1},dy[]={-1,1,0,0}; for(int i=0;i<4;i++){ int xx=dx[i]+x; int yy=dy[i]+y; if(xx<1||yy<1||xx>n||yy>m||a[xx][yy]=='#'||a[xx][yy]=='G'||vis[xx][yy]==1){ continue; } vis[xx][yy]=1; dfs(xx,yy); } } int sum(int x,int y){//每一个地方放炸弹所可以炸死的僵尸数量 int sum=0; for(int i=x;i>=1;i--){ if(a[x][i]=='#'){ break; } if(a[x][i]=='G'){ sum++; } } for(int i=x+1;i<=n;i++){ if(a[x][i]=='#'){ break; } if(a[x][i]=='G'){ sum++; } } for(int i=y;i>=1;i--){ if(a[i][y]=='#'){ break; } if(a[i][y]=='G'){ sum++; } } for(int i=y+1;i<=m;i++){ if(a[i][y]=='#'){ break; } if(a[i][y]=='G'){ sum++; } } return sum; } int main(){ cin>>n>>m>>ax>>ay; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } dfs(ax,ay); int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(vis[i][j]==1){ ans=max(ans,sum(i,j)); } } } cout<<ans; }
信息
- ID
- 42
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 9
- 已通过
- 8
- 上传者