【CCF-CSP】201409-4 最优配餐 C++

2023-05-16

文章目录

  • 一、题目
  • 二、解题
    • 1.题目
    • 2.代码
    • 3.提交结果
  • 总结
    • 1.代码思路


一、题目

送餐

原题目链接

二、解题

1.题目

一个BFS(宽度优先搜索)的实现,用于处理迷宫中的节点。下面是代码的详细解释:

  1. 定义了一个node结构体,其中包括了x,y,dis三个属性。

  2. 开始while循环,在队列q不为空的条件下,执行以下操作:

    a. 取出队首元素cur。

    b. 遍历cur的四个方向,计算出相邻节点的坐标并存储到tmp中。

    c. 判断节点是否越界或已被访问,如果是则跳过当前循环,继续执行下一个。

    d. 如果节点未被访问,则标记为已访问,累加上该节点值num[tmp.x][tmp.y](cur.dis+1),并且将tmp的距离dis设为cur的距离dis+1。

    e. 将tmp加入队列q中。

  3. 循环结束后,输出ans的值。

void bfs(){
	node temp;
	while(!q.empty()){
		node cur=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			temp.x=cur.x+pos[i].x;
			temp.y=cur.y+pos[i].y;
			if(temp.x<1 || temp.x>n || temp.y<1 || temp.y>n || vis[temp.x][temp.y]) continue; 
			vis[temp.x][temp.y]=true;
			ans+=num[temp.x][temp.y]*(cur.dist+1);
			temp.dist=cur.dist+1;
			q.push(temp);
		}
	}
	cout<<ans;
}

2.代码

dev c++ 5.11

#include<iostream>
#include<queue>
using namespace std;
const int N=1005;
long long num[N][N];
bool vis[N][N];
struct node{
	int x,y;
	long long dist;
};
struct POS{
	int x,y;
}pos[4]={{-1,0},{1,0},{0,-1},{0,1}};
queue<node> q;
int n;
long long ans=0;
void bfs(){
	node temp;
	while(!q.empty()){
		node cur=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			temp.x=cur.x+pos[i].x;
			temp.y=cur.y+pos[i].y;
			if(temp.x<1 || temp.x>n || temp.y<1 || temp.y>n || vis[temp.x][temp.y]) continue; 
			vis[temp.x][temp.y]=true;
			ans+=num[temp.x][temp.y]*(cur.dist+1);
			temp.dist=cur.dist+1;
			q.push(temp);
		}
	}
	cout<<ans;
}

int main(){
	int m,k,d,x,y,c;
	cin>>n>>m>>k>>d;
	for(int i=0;i<m;i++){
		cin>>x>>y;
		q.push({x,y,0});
	}
	for(int i=0;i<k;i++){
		cin>>x>>y>>c;
		num[x][y]+=c;
	}
	for(int i=0;i<d;i++){
		cin>>x>>y;
		vis[x][y]=true;
	}
	bfs();
	return 0; 
} 



3.提交结果

最优配餐

总结

1.代码思路

这道题可以使用 BFS(广度优先搜索)解决。思路如下:

  1. 将选定的餐厅进入队列。

  2. 遍历队列,每次取出队首的元素,进行以下操作:

(1)将四周没有障碍物(大街)且没有被访问过的点入队。

(2)将距离前面一个点的距离加一,作为这个点的距离,并将这个点的贡献值累加到答案中。

  1. 遍历结束后,打印出答案。

实现时,需要用 bool 数组 vis[] [] 来记录每个点是否被访问过,用 long long 数组 num[] [] 记录每个点对答案的贡献值。

代码中 queue 存放的节点包含三个属性:x 和 y 表示它在矩阵中的位置,dist 表示这个点到达时的距离。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【CCF-CSP】201409-4 最优配餐 C++ 的相关文章

  • 数据库的视图

    数据库视图的作用 数据库视图是一种虚拟的表 xff0c 它不是一个实际的表 xff0c 而是根据一个或多个实际表的查询结果生成的一个虚拟表 xff0c 它可以看作是对一个或多个表的一个或多个列的子集的逻辑表示 在数据库中 xff0c 视图有

随机推荐

  • Ubuntu开启FTP服务+FileZilla传输文件

    1 Ubuntu安装 FTP 服务 sudo apt install vsftpd 2 本地 写入权限使能 xff0c 首先打开 etc vsftpd conf 进行配置 sudo vim etc vsftpd conf 配置文件中 loc
  • spring集成Junit单元测试出现的问题及解决办法

    spring集成Junit单元测试出现的问题及解决办法 1 在spring集成Junit单元测试的时候 xff0c 所有的集成步骤都没有问题 xff0c 但是在启动测试的时候出现如下问题 xff1a java lang IllegalSta
  • MySQL实验

    表如下 xff1a 学院 xff08 学院代码 xff0c 学院名称 xff09 学生 xff08 学号 xff0c 姓名 xff0c 性别 xff0c 学院代码 xff09 教师 xff08 教师号 xff0c 教师名 xff0c 学院代
  • SpringBoot整合Mybatis-plus代码生成器

    本文还是采用经典实用知识三段论 是什么 xff1f 能干什么 xff1f 怎么干 xff1f 让Mybatis plus代码生成器轻而易举的为你所用 希望文章能够帮到你提高写代码的效率 前言 整合基于在idea已经创建好的Springboo
  • 定义struct结构体数组

    题目要求 xff1a 有3个候选人 xff0c 每个选民只能投票选一人 xff0c 要求编一个统计选票的程序 xff0c 先后输入被选人的名字 xff0c 最后输出各人得票结果 解题思路 xff1a 设一个结构体数组 xff0c 数组中包含
  • AAC高级音频编码

    AAC 的支持现状 目前支持 AAC 的产品还比较少 xff0c 这主要是因为专利使用费大大限制了 AAC 的发展 xff01 不过好在有索尼 诺基亚 苹果 松下四大巨头的鼎力支持 xff0c 场面还不算冷清 重量级的 iPod 和 iPo
  • 三种做法——判断给定的字符序列是否是回文,回文是指一个字符序列以中间字符为基础,两边字符忽略大小写完全相同

    判断给定的字符序列是否是回文 xff0c 回文是指一个字符序列以中间字符为基础 xff0c 两边字符忽略大小写完全相同 xff08 10分 xff09 判断回文多种方法 xff1a 不值得推荐方法 xff1a 纯死脑筋做法 span cla
  • word文件转md文件

    文章目录 一 下载pandoc二 pandoc转换1 cmd进入文件夹2 代码实现 一 下载pandoc 建议使用msi直接安装 xff0c 而不是下载安装包直接使用 xff0c msi的下载方法 xff1a 安装方法 二 pandoc转换
  • JavaScript中定义结构体一维二维多维数组

    相信学过C语言的开发者刚接触JavaScript时都会很不习惯 xff0c C语言中的虽然是结构化面向过程的编程语言 xff0c 但是C语言中也有封装的思想 xff0c 例如C语言结构体和公用体等 xff0c 在他们中都可以直接定义变量 C
  • does not name a type报错的改正方式

    does not name a type报错的改正方式 原代码如下 xff1a 报错 xff1a does not name a type 原因 xff1a 不知道 改正方法 xff1a 把初始化放主函数外面 xff0c 赋值放主函数里面
  • ERROR: Cause: unable to find valid certification path to requested target终极解决方法

    ERROR Cause unable to find valid certification path to requested target终极解决方法 2022 09 20 更新一下 xff1a 报这个错主要是因为网络问题 xff0c
  • yum安装ansible报错如何解决

    yum安装ansible报错解决方案 一 报错信息 xff1a 二 如何解决1 重装虚拟机2 修改yum源3 使用EPEL源4 安装ansible5 测试 文章参考 xff1a https mirrors tuna tsinghua edu
  • FORTRAN基础编程(1)——基本格式及读入输出

    FORTRAN基础编程 xff08 1 xff09 基本格式及输出 读入 文章目录 FORTRAN基础编程 xff08 1 xff09 基本格式及输出 读入书面格式一 Fixed Format 固定格式 二 Free Format 自由格式
  • Anaconda3-2022.05安装与环境配置

    文章目录 1 Anaconda下载方式一 xff1a Anacoda官网下载方式二 xff1a 国内镜像下载 2 Anaconda安装3 Anaconda环境变量配置4 测试是否配置成功 1 Anaconda下载 方式一 xff1a Ana
  • 解题笔记——救援

    解题笔记 救援 救生船从大本营出发 xff0c 营救若干屋顶上的人回到大本营 xff0c 屋顶数目以及每个屋顶的坐标和人数都将由输入决定 xff0c 求出所有人都到达大本营并登陆所用的时间 在直角坐标系的原点是大本营 xff0c 救生船每次
  • 【千奇百怪】java自定义spotbugs检测器

    前两天 xff0c 在对一个代码质量检测平台维护的时候 xff0c 遇到了一个新添加指定规则集的需求 xff0c 在经过一番折腾后否定掉了基于 ANTLR 实现自定义规则 xff1b 基于 CheckStyle 实现自定义规则 xff1b
  • win10深度学习环境配置

    nvidia驱动以及cuda的安装与卸载 下载cuda和对应的cudnn nvidia官网 直接在搜索栏搜索想要下载的版本 xff0c cuda11 x和cudnn11 x 首先安装cuda 安装cuda会自动安装相对应的显卡驱动 xff0
  • 【CCF-CSP】201312-1 出现次数最多的数 C++

    文章目录 一 题目二 解题1 题目解释1 出现次数最多的数2 如果这样的数有多个 xff0c 请输出其中最小的一个 2 代码3 提交结果 三 总结1 代码思路 xff1a 2 其他 一 题目 题目原始链接 xff1a http 118 19
  • 【CCF-CSP】201403-1 相反数 C++

    文章目录 一 题目二 使用步骤1 解题2 代码3 提交结果 总结1 代码思路2 其他 一 题目 原题目链接 二 使用步骤 1 解题 求相反数的队数 xff0c 可以利用相反数的绝对值相等的思路来解题 2 代码 dev c 43 43 5 1
  • 【CCF-CSP】201409-4 最优配餐 C++

    文章目录 一 题目二 解题1 题目2 代码3 提交结果 总结1 代码思路 一 题目 原题目链接 二 解题 1 题目 一个BFS xff08 宽度优先搜索 xff09 的实现 xff0c 用于处理迷宫中的节点 下面是代码的详细解释 xff1a