题目链接:Walking Machine
题目大意:
- 找出能出这个矩阵范围的点
- W表示:向上走,S表示向下走,A表示向左走,D表示向右走
记忆化搜索:
#include<iostream>
using namespace std;
const int N = 1010;
int n,m;
char g[N][N];
int st[N][N];//记忆化数组,0表示没搜索过,1表示符合题意,2表示搜索过,但是不符合题意
int ans;
int dfs(int x,int y){
if(st[x][y]){
return st[x][y];
}
if(x < 0 || x > n - 1 || y < 0 || y > m - 1){
return 1;
}
//初始化为2,搜索过,但是还不符合题意
st[x][y] = 2;
int a = x,b = y;
//进行搜索
if(g[x][y] == 'W'){
x--;
}
if(g[x][y] == 'A'){
y--;
}
if(g[x][y] == 'S'){
x++;
}
if(g[x][y] == 'D'){
y++;
}
//返回(x,y)的状态
return st[a][b] = dfs(x,y);
}
int main() {
cin >> n >> m;
for(int i = 0; i < n; i ++ ) cin >> g[i];
for(int i = 0; i < n; i ++ ){
for(int j = 0; j < m; j ++ ){
if(!st[i][j]) dfs(i,j);
if(st[i][j] == 1) ans ++;
}
}
cout<<ans<<endl;
return 0;
}