CCF 201312-5 I’m stuck C++

博客探讨了图论问题,寻找一种特殊点:起点可达但无法到达终点。通过模拟BFS搜索过程,从起点和终点分别进行搜索,并在过程中进行标记判断。文章提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图论
要求找到满足下述情况的点
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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值