AT213 器物損壊!高橋君 题解
Doveqise
2019-03-07 17:03:08
啊 又是一道模拟题(AT好题)(入门必备233)
这道题也是只要按照题意写一下就好 见代码(代码较全)
(dx dy 吹爆LRJ!)
```cpp
#include<bits/stdc++.h>
using namespace std;
int h,w,a,b,v[505][505];
int dy[4]={0,0,1,-1},dx[4]={1,-1,0,0};//移动
bool flag;
char m[505][505];//图
void dfs(int y,int x,int f){//dfs搜索
if(y<0||y>=h||x<0||x>=w||(v[y][x]&&f>=v[y][x]))return;//判断是否违法
if(m[y][x]=='g'){flag=1;return;}//到达终点
if(m[y][x]=='#'){if(f==3)return;f++;}//跨越障碍
v[y][x]=f;//记录步数
for(int i=0;i<4;i++)
dfs(y+dy[i],x+dx[i],f);//扩展
}
int main(){
scanf("%d%d",&h,&w);
for(int i=0;i<h;i++){
scanf("\n");//再次万恶scanf读入空行
for(int j=0;j<w;j++){
scanf("%c",&m[i][j]);//读入图
if(m[i][j]=='s')a=i,b=j;//记录起点
}
}
dfs(a,b,1);//开始遍历
flag?puts("YES"):puts("NO");//判断是否有路径
}
```