Eight Point Sets-Codeforces 反向BFS

OpenSpec 从入门到精通:AI 时代的最佳 SDD 范式 同样都是「先写规范再写代码」的开源 SDD 框架,OpenSpec(https://github.com/fission-ai/openspec) 展现出了极高的工程性价比,无论是使用 Claude Code、Cursor 还是 Aider,都可以无缝接入 OpenSpec 的规格管理层。这些问题需要人来做判断,AI 做不了这个主。整个流程跑下来,OpenSpec 产出的效果还是令人满意的,一些前期没有考虑到的细节 AI 都补上了,生成的相关文档也有利于开发人员的知识对齐,可以尝试在团队内部推广。 阅读详情

题意:
你站在一个r*c的森林里面,每一个可能是树(人不能经过该点),还有一些你的敌人,这些敌人可以多个人再一个格子里面,他们就是要阻止你到达森林的出口,所以会尽力拦截你(你们每次可以移动到相邻的格子),你遇到他们就要和他们战斗,问你最少和所少敌人战斗?
思路:
首先,假设你有一条到终点的路径x,他们可能在路径x的任意一个节点上拦截你,假设他可以在路径x的某一点拦截到你,说明敌人比你先到这个节点。然而,由于你的路径是不确定的,而且拦截你的节点也是不确定的,所以要转化到确定的节点,路径x唯一确定的就是你的起点和终点。那么就往终点上想。
既然敌人比你先到路径X上的点P,那么接下来他可以按照你的路径走到终点,也就是说,敌人会比你先到终点,这样路径上的其他不确定的点全部转化为了终点这个确定的点。
问题转化为谁先到达终点,能比你先到终点的敌人就可以和你战斗。这个时候从终点反向BFS即可(因为终点只有一个,其他点有很多个),就可以了。

转化与化归的思想,从变化中寻找不变量,把不确定转化为确定。

AC CODE:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

typedef long long LL;

#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define mem(a,b) memset(a,b,sizeof(a))
#define per(i,a,b) for(int i = a;i <= b;++i)
#define rep(i,a,b) for(int i = a;i >= b;--i)
const int maxn = 1e3;
int r = 0,c = 0;
char str[maxn+10][maxn+10];
bool vis[maxn+10][maxn+10]; 
//int ex = 0,ey = 0,sx = 0,sy = 0;//不需要 
int ans = 0;
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
void bfs(int x,int y){
	memset(vis,false,sizeof(vis));
	queue<pii> que;
	que.push(pii(x,y));
	vis[x][y] = true;
	int cnt = 1;
	bool flag = false;
	while(!que.empty()){
		int end = cnt;
		cnt = 0;
		while(end--){//遍历同一层节点,因为同一层节点离E得距离一样,
		//可以判断它是否可以拦截 
			pii p = que.front();que.pop();
			int x1 = p.first,y1 = p.second;	
			per(i,0,3){
				int tx = x1 + dx[i],ty = y1 + dy[i];
				if(tx >= r || tx < 0 || ty >= c || ty < 0 || vis[tx][ty] == true
				|| str[tx][ty] == 'T'){
					continue;
				}
				if(str[tx][ty] == 'S'){
					flag = true;
				}
				if(str[tx][ty] > '0' && str[tx][ty] <= '9'){
					ans += (str[tx][ty] - '0');
				}
				vis[tx][ty] = true;
				que.push(pii(tx,ty));
				++cnt;
			}
		}
		if(flag == true){
			return ;
		}
	}	
}
int main(){
	while(~scanf("%d %d",&r,&c)){
		ans = 0;
		per(i,0,r-1){
			scanf("%s",str[i]);
		}
		per(i,0,r-1){
			per(j,0,c-1){
				if(str[i][j] == 'E'){//不需要记录起点和终点,从终点开始BFS,
				//遍历过程碰到S再退出 
					bfs(i,j);
					//break;
					i = r;j = c;//退出两重循环的好办法 
				}
			}
		}
		printf("%d\n",ans);
		
	}
	
	return 0;
}

【局部规划模块轨迹优化算法】Teb_planner规划算法 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对****做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。 阅读详情

相关推荐

SAP 凭证分割功能 - 概述&系统配置 - Chapter01/02

为何要进行凭证拆分(分割)?在启用凭证分割之前, 在财务凭证在过账时会自动带出默认的利润中心,这利 润中心一般是从其他对象派生出来的(比如从成本中心、WBS 或资产负债表科 目定义默认的利润中心等),但是某些情况下的财务过账是不会派生出利润中 心的,比如说应收或者应付。如果一笔销售凭证上有两个行项目,10 行对应的成品物料 A 的利润中心为 TPCA-100;公司项目Dr/Cr科目金额利润中心10001Dr应收账款20002Cr库存商品A1500TPCA-1003Cr。

weixin_46525734的博客 3956

Codeforces 1638 D. Big Brush —— BFS

This way 题意: 给你个n*m的矩阵,你每次可以在矩阵内的某个2*2子矩阵写上某个相同的数,问你经过怎么样的操作得到最终的矩阵。 题解: 一眼就看出来是BFS,这种题目一般来说都是倒着找,首先找到某个完整的2*2子矩阵,然后消去它的影响,再检查它周围的这一圈是否有消去影响之后可能可以涂的,然后依次去做。 #include<bits/stdc++.h> using namespace std; const int N=1e3+5; int a[N][N]; int same(int x

天翼之城的博客 422

5G时代必知:LDPC与Polar码实战解析(附MATLAB仿真代码)

本文深入解析5G时代核心信道编码技术LDPC码与Polar码的原理差异及性能表现,通过MATLAB仿真代码展示其在实际通信系统中的应用。LDPC码适用于大数据块高速传输,而Polar码在小数据块低时延场景表现优异,帮助开发者优化5G系统设计。

sugar的博客 642

codeforces:A. Maze【逆向思维 + dfs爆栈 + 修改为bfs + 注意visit的位置】

那么,我们有没有办法加深python栈的深度呢??

小楼一夜听春雨 497

动态规划法:n*m方格前进问题

在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照正前方相临的五个方向(方格)前进但不能越出方格。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出和的最大值。 算法设计: 可以使用动态规划方法,从顶部开始,将第二排的每个数加上顶部第一排的最优解,将6排的问题缩小为5排的问题,然后重复该操作,直到底部最后一排,此时

Winifred_1997的博客 4675

ray.tune调参学习笔记0:调参基本流程

本篇总结python中使用tune调参的整体流程

Mr_111000的专栏 2622

codeforces 1283D(BFS)

题意描述 有n个人,要求找到m个圣诞树,使n个人到m个圣诞树之间的距离之和最小 思路 使用bfs来做,贪心的考虑,我们先找与n个点距离为1的圣诞树,然后再找距离为2的圣诞树,依次类推。 AC代码 #include<bits/stdc++.h> #define x first #define y second #define PB push_back #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) begin(a),end(a) #def

Dejavu的博客 320

PPL文档——Excel制作的甘特图加上动态今日线

当很多项目需要跟踪进度时,我们介绍一种在Excel中创建甘特图。

qq_34777858的博客 7064

Codeforces1063 B. Labyrinth(bfs变形)

题意: 解法: bfs,队列维护节点位置(x,y)以及左右走的次数(l,r), 即(x,y,l,r). 但是bfs到同一个节点,有可能(l,r)不同, 此时如果l+r比原先更少,那么入队覆盖,继续bfs. ps: 一个性质是同一个节点的左右位移距离r-l是相同的. code: #include <bits/stdc++.h> using namespace std; const int maxm=2e3+5; char s[maxm][maxm]; int n,m,r,c,X,Y; in

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 280

Fluent验证案例03:管道中湍流流动压降计算——采用kw-sst模型计算压降更为准确。

阅读(4053) 评论(0)本案例利用Fluent计算管道中湍流流动压降。

qq_15963745的博客 876

OpenClaw实战系列10(完结篇):企业级应用实战案例——从0到1搭建智能客服系统

本文以一家跨境电商公司为例,从需求分析、系统设计、分步搭建到上线运营,完整呈现智能客服系统的落地全过程。所有配置命令和截图均来自实测环境,你可以直接复制使用。

PeterPan的博客 1305

CodeForces - 1272E(bfs,思维)

题目 首先建反向边。 然后奇偶分成两派,进行两次bfs,更新能到的点的步数 。 因为偶数点要由奇数来更新,所以最后更新的时候奇数点在偶数的距离里找,偶数在奇数里面找。 为什么bfs可以呢,以跑奇数为例,第一遍时,我们把一步可以到的偶数点都更新了,那后面的偶数点要更新时只能通过前面能到的偶数点去更新,路径也就是奇偶偶偶偶… #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<

weixin_45714726的博客 244

《网络存储技术》形考实训4:为小微企业搭建基于Windows Server的文件共享与权限管理服务

本文介绍了在域环境下部署DFS分布式文件系统的完整流程。项目目标是将3台存储服务器(NS1、NS2、NS3)上的多个共享文件夹通过DFS命名空间进行统一整合,使员工可通过单一访问路径访问所有资源。实施步骤包括:1)搭建AD域环境并创建用户/组;2)将存储服务器加入域并配置共享权限;3)在域控制器安装DFS命名空间角色;4)创建基于域的命名空间(\xc.cn\共享);5)将各服务器共享文件夹映射到命名空间;6)进行客户端访问验证。通过DFS实现了物理存储位置不变情况下的逻辑统一访问,提高了文件管理的便捷性和可

深耕计算机专业知识与技术。 946

codeforces329B(bfs)

题意描述 给定RxC的网格,网格中存在猎人,询问走到终点前要和多少组猎人碰面 思路 由于猎人事先知道我们行走的路线,所以猎人们可以先走到终点前等待,可以使用bfs预处理出终点到各个点之间的距离,如果猎人到终点的距离小于等于我们从起点到终点的距离,那么一点可以相遇,最后遍历一遍即可。 代码 #include<bits/stdc++.h> #define x first #define y second #define IOS ios::sync_with_stdio(false);cin.tie(

Dejavu的博客 303

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Codeforces 910A BFS

题意:给定一个n长度的01字符串,下标为1到n。每次前进的跳跃步数不能超过d,假定当前位置为x,当且仅当x+i位置为1,i问从起点1到终点n最少步数是多少。分析:属于很简单的搜索题,我用的是BFS,因为DFS超时了,想不到更好的剪枝...代码如下:#include #include #include using namespace std; const int INF = 10000000

勇敢前进的ACMer 521

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Codeforces 329B bfs

B. Biridian Forest time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You're a mikemon breeder currently in the middle o

PiscesCrab的博客 532

CodeForces 116C 【BFS】

思路: 求所有树的最大高度? 注意:所有树从树根开始? #include using namespace std; typedef long long LL; struct asd{ int to; int next; }e[2500]; int head[2500],tol; int pre[2500]; int n; void add(int u,int v) { e[

ONE MORE TRY 567

CodeForces 906C(状态压缩 +BFS)

题目链接 题意:某人举办了一个party,邀请了他的朋友来,他的朋友也邀请了他们的朋友.etc。然后某人并不认识他朋友的朋友,这样聊天很尬,所以就让邀请他不认识的人的朋友给某人介绍。假设通过朋友C介绍的话,那么朋友C的所有朋友都会成为朋友,问让所有人成为朋友需要几个人来介绍,输出他们。 题解: 因为最多只有22个人,所以比较容易想起用状态压缩,然后BFS枚举每一个人做第一个介绍的情况就好了。...

开心铁匠铺 427

Codeforces 962C Make a Square(bfs)

题目链接:Make a Square 题意 给定一个不包含前导零的正整数 nnn,要求删除最少的数字位,使得最终剩下的数字不包含前导零且它是一个完全平方数,或者判断这是无法实现的。 输入 输入只包含一个整数 n&nbsp;(1≤n≤2×109)n&nbsp;(1≤n≤2×109)n~(1\leq n\leq2\times10^9)。 输出 如果无法实现,则...

Dmaxiya 521

Codeforces 1064D Labyrinth(双向队列,BFS)

You are playing some computer game. One of its levels puts you in a maze consisting of n lines, each of which contains m cells. Each cell either is free or is occupied by an obstacle. The starting cel...

包子不卖包子 730

Infinite Maze CodeForces - 197D(bfs)

vjudge提交链接 题意: 给你一张 n * m的地图,S表示起点,#表示墙, . 表示空地。 现在要把该平面扩大,无休止的复制该地图,把该平面堆的无限大。 现在问的能否从起点S永无止境的走下去。 思路: 虽然地图变大了,但任意一点所表示的字符都可知晓。 即点( i , j ) 与 ( ( i % n + n ) % n , ( ( j % m + m ) % m )【原地图】 这里 i 和 j 可能为正,可能为负数,因为地图被无限放大了。 无限大平面由许多个 n * m 拼接而成,因此设地图1号,地图

Helinshan的博客 348

CodeForces - 796D bfs-树划分成森林

题目链接:http://codeforces.com/contest/796/problem/D 题目大意:有一棵树,有n个消防点。每个点到最近消防点的距离<=d。题目满足这个条件。问你最多可以拆多少条边,使这个条件仍然满足。 思路: 刚开始我的思路是dfs每个消防点,如果距离>d拆。或者遇到消防点拆。 这个思路的问题在: 如图d=3,那么拆掉红色的,那么1点就不满足了。 正确的思路...

H_ang的博客 427

CodeForces - 510B Fox And Two Dots(BFS)

传送门 题意:判断相同字母能否连成环; bfs直接开搞; #include<bits/stdc++.h> using namespace std; int d[4][2] = {0,1,1,0,0,-1,-1,0};//遍历四个方向 int vis[100][100]; char tu[100][100]; int n, m, ans; void bfs(int x, int y, int nx, int ny){//从nx ny 开始走到x y if(vis[x][y]){ //是否走

qq_45817631的博客 272

Codeforces 429B Working out bfs构造

题目链接:点击打开链接 题意:给定n*m的矩阵 有一个人a从左上角↖走到右下角↘,只能↓或→走 另一个人b从左下角↙走到右上角↗,只能↑或→走 使得2个人的路径有且仅有一个格子是相交的。 统计2个人的权值和(相交格子的权值和不计) 问最大的权值和是多少。 思路: 首先转换一下题意,也就是找一个格子与4个角落连不相交的线。 我们观察相交的那个格子,那个格子的上下左右必然对应着一个角

九野的博客 2214

CodeForces - 616C详解(很有意思的bfs)

 思路: 很有意思的一道题,首先如果暴力遍历"*",bfs(),运行到第11个测试点就超时了,因为点比较多,是1000*1000的格子,每次bfs一个点要进行4*10^6次运算(4是因为要上下左右找一次)。也就是最大运算是10^6*4*10^6等于4*10^12,远超出计算机一次能运算的10^8. 正确思路: 遍历" . ",把"."的连通区域bfs出来,给它赋上标记,表明这些点是一个连通区...

一条菜狗的博客 974

BFS学习 Codeforces 301_div.2_Ice Cave

C. Ice Cave time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You play a computer game. Your character stands...

diankeng5481的博客 193

BFS+枚举 Codeforces666B World Tour

传送门:点击打开链接 题意:有向边n个点,m条边(n b->c->d的路径最大,从u->v走的路径必须是最短路。 题目保证存在4个点可以走到。 思路:先BFS预处理出所有的从u到v的最短路径,并保存其他点到u的最短路径和次短路径,并保存好方案 保存u到其他点的最短路径和次短路径,并保存好方案 之后枚举b和c,通过之前保存的最短路和次短路组合起来,取最大值,就搞定了 #include

qwb的博客 697
上一篇: 二分搜索中的边界问题
下一篇: Find a multiple-鸽巢原理的妙用
Mavis code
博客等级 码龄9年 13粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值