图论
要求找到满足下述情况的点
1、起点能到达此点
2、此点不能到达终点
思路即模拟BFS搜索过程,先从起点开始进行BFS搜索,再从终点开始搜索,能到达的点标记为true
void bfs1(x,y){
指明行走时x、y坐标的变化情况:
ST+ 四方向都能走,上(-1,0)左(0,-1)
- 左右方向 (0,-1)(0,1)
| 上下方向 (-1,0)(1,0)
. 向下 (1,0)
# 不做变化
行走后坐标为(x+dir[i],y+dir[i+1])
要求新坐标在[0,n-1][0,m-1]范围内
若对应元素值不为#且未被标记为true(证明是第一次访问),则对该点进行bfs搜索
}
从终点开始搜索,和bfs1不同之处在于要根据行走方向判断要走到的位置是不是支持这趟行走
例如
if(dirx==1&&diry==0)//向下行走
if(a[nx][ny]=='-'||a[nx][ny]=='.')
不能走
else
bfs2(nx,ny);
完整满分c++代码:
#include <iostream>
#include <vector>
using namespace std;
int n,m;
char a[55][55];
bool reach1[55][55];
bool reach2[55][55];
void BFS1(int x,int y){
reach1[x]