蓝桥杯每日一题(BFS)

1562 微博转发

开始思路错误点:在用拉链法保存关注信息的时候,因为要看一个用户发的有多少转发的,所以要以用户为坑位,所有关注这个坑位的用户为链表。(开始弄反了)

e数组存某个用户的idx,ne是某个节点在链表上的下一个,h是坑位。

st状态数组的参数是用户,而不是idx

#include<bits/stdc++.h>
using namespace std;
//1562 微博转发
const int N=1e3+10;
int n,l;
//拉链法存储
int e[N],idx,ne[N],h[N];
bool st[N];
//e某个idx对应的用户是谁
//ne 这个用户和其他人是否被i同时关注
//h代表某个用户的关注列表的链表尾部
void add(int u,int x)
{// 把某个被关注的用户加入到某个用户的链表中e[idx]=x,ne[idx]=h[u],h[u]=idx++;
}int bfs(int s)//找某个节点的第l层关注的用户个数
{//之前都是只要有后继就加入到队列中//如何实现到规定的层的位置就终止呢//就是L层循环:每次循环都控制向外延伸一层memset(st,0,sizeof(st));queue<int>q;q.push(s);st[s]=1;int res=0;//前l层有多少个点for(int i=1;i<=l;i++)//向前走l层{int num=q.size();//num就是上一次循环扩展出来的点while(num--){int t=q.front();q.pop();for(int j=h[t];j!=-1;j=ne[j]){if(!st[e[j]]){q.push(e[j]);res++;st[e[j]]=1;}}}}return res;}
int main()
{cin>>n>>l;memset(h,-1,sizeof(h));for(int i=1;i<=n;i++){int x;cin>>x;while(x--){int u;cin>>u;add(u,i);//i关注了u}}int qu;cin>>qu;while(qu--){int user;cin>>user;cout<<bfs(user)<<endl;}}

//844走迷宫

自己是用pair并且second放走的步数,内存超限了。

下面是自己的做法

#include<bits/stdc++.h>
using namespace std;
//844走迷宫
typedef pair<int,int>PII;
typedef pair<PII,int> PIII;
const int N=100;
int p[N][N];
int n,m;
int s[4]={0,1,0,-1};
int z[4]={1,0,-1,0};
int dfs()
{queue<PIII>q;q.push({{1,1},0});while(!q.empty()){PIII t=q.front();q.pop();PII zuo=t.first;int x=zuo.first;int y=zuo.second;for(int i=0;i<4;i++){if(x+z[i]>=1&&x+z[i]<=n&&y+s[i]>=1&&y+s[i]<=m&&!p[x+z[i]][y+s[i]]){q.push({{x+z[i],y+s[i]},t.second+1});if(x+z[i]==n&&y+s[i]==m){//cout<<t.second+1<<endl;return t.second+1;}}}}}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int num;cin>>num;if(num)p[i][j]=1;}}cout<< dfs();
}

y做法:直接使用一个二维数组存某个坐标到达的时候走的步数。

845 八数码 

在bfs求最短路的问题中,重点是怎么保存状态,y的做法:把矩阵转化为字符串,从初始位置到这个状态走的距离就是变化的次数

太巧妙了;

//看完y思路之后,最后怎么都是输出不对,最后找到是swap(还原的那个swap)应该也在if条件中,就是在4层的for循环中不一定都符合不越界的要求。

#include<bits/stdc++.h>
using namespace std;
//845 八数码
//既可以存状态,又可以存步数
unordered_map<string ,int>d;//记录到这个状态转换了多少次
queue<string>q;//所有的状态
string start="12345678x";
int ss[4]={-1, 0, 1, 0},z[4]={0, 1, 0, -1};
int bfs(string s)
{q.push(s);d[s]=0;while(q.size()){string t=q.front();q.pop();int p=t.find('x');int y=p/3;int x=p%3;int dis=d[t];if(t==start)return d[t];for(int i=0;i<4;i++){//  cout<<" ********"<<endl;int xx=x+z[i];int yy=y+ss[i];//cout<<xx<<" "<<yy<<" "<<"si::"<<ss[i]<<endl;if(xx>=0&&xx<3&&yy>=0&&yy<3){swap(t[p],t[yy*3+xx]);//cout<<"yun"<<endl;if(!d.count(t)){d[t]=dis+1;q.push(t);}swap(t[p],t[yy*3+xx]);}//if(t==start)return d[t];}}return -1;
}int main()
{string s;for(int i=0;i<9;i++){string c;cin>>c;s+=c;}//cout<<s<<endl;cout<<bfs(s)<<endl;}

//1233全球变暖

自己做的WA,先用 bfs看有几个岛屿,淹没操作后,再用bfs看。

#include<bits/stdc++.h>
using namespace std;
//1233 全球变暖
typedef pair<int,int>PII;
const int N=1010;
int n;
int p[N][N],f[N][N];
int st[N][N];
int s[4]={1,0,0,-1},z[4]={0,1,-1,0};
int bfs()
{int cnt=0;memset(st,0,sizeof(st));queue<PII>q;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!st[i][j]&&p[i][j])//没有被访问过的一片陆地{//  cout<<"find that match if"<<endl;st[i][j]=1;cnt++;//cout<<"cnt "<<cnt<<endl;q.push({i,j});while(q.size()){PII t=q.front();//cout<<q.front().first<<" "<<q.front().second<<endl;q.pop();for(int k=0;k<4;k++){int x=t.first+s[k];int y=t.second+z[k];if(x>=1&&x<=n&&y>=1&&y<=n&&p[x][y]&&!st[x][y]){q.push({x,y});st[x][y]=1;}}}}}}return cnt;
}int main()
{cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){char c;cin>>c;if(c=='#')p[i][j]=1,f[i][j]=1;}}//查看有几个岛屿int precnt=bfs();//淹没for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!f[i][j])//如果本来是一个海域{for(int k=0;k<4;k++){//cout<<"dawn"<<endl;int x=i+s[k];int y=j+z[k];if(x>=1&&x<=n&&y>=1&&y<=n&&p[x][y]){p[x][y]=0;//被淹没}}}}}//还有几个岛屿int poscnt=bfs();int num=precnt-poscnt;cout<<num<<endl;}

y是在bfs的时候就在4的for循环中判断,这个连通块是否被淹没,是就加加。最后根据这个连通块的节点个数和被淹没的节点个数判断这个岛屿是否被淹没

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子上位机软件WINCC的项目改造及其多元化报警功能实践:巨控GRM560智能远程控制终端

标签: #西门子WINCC #OPC通讯 #短信报警系统 #项目改造 #智能报警 西门子上位机软件WINCC的项目改造及其多元化报警功能实践 在工业自动化领域&#xff0c;有效的监控和及时的异常响应是保障生产安全和效率的关键。西门子的WINCC上位机软件升级&#xff0c;整合了巨控的OPC560…

Python 计算1~100 求和

result0 for i in range(101):print(i)result result i print(result)

Redis 内存是如何划分的?

查询内存命令 info memory 查询Redis自身使用内存的统计数据。通过这个命令&#xff0c;可以了解 Redis 实例的内存分配情况、内存碎片、键空间使用情况等 内存分配情况&#xff1a; used_memory&#xff1a;Redis 实例当前使用的内存总量&#xff08;以字节为单位&#xff0…

LeetCode 面试经典150题 45.跳跃游戏II

题目&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…

【初学者】Visual Studio 2019没有 C 项目,只有C++怎么办? 怎么创建第一个项目教程。

起因&#xff1a; 想要在 Visual Studio 上创建一个 C 项目&#xff0c;发现只有 C 的。 解决&#xff1a; C 是 C 的超集。只要创建 C 的项目就行了&#xff0c;将新增的 .cpp 文件改后缀为 .c 即可。不会有问题的。 C 的语法更加严格&#xff0c;而 C 的项目更宽松。虽然…

【云呐】固定资产管理系统的功能有哪些?管理工具

为了提高经营效率&#xff0c;降低企业成本&#xff0c;许多企业选择固定资产管理系统。那么&#xff0c;固定资产管理系统有什么作用呢&#xff1f; 资产登记&#xff1a;  固定资产管理系统可以方便地登记公司的固定资产&#xff0c;包括资产名称、规格型号、购买日期、使…

3dmax渲染卡光子、灯光缓存的处理方法

1、在vray全局开关勾选最大射线强度 2、将场景材质转换为vray类型 3、关闭置换 4、清理空物体等场景垃圾 可以试一下优化场景的工具&#xff0c;清理空物体、空代理、适当塌陷精简场景、清理场景垃圾等 有3dmax效果图渲染需求可以使用渲染100&#xff08;注册填邀请码‘7788…

微信小程序简单实现手势左右滑动和点击滑动步骤条功能

使用微信小程序实现左右滑动功能&#xff0c;自定义顶部图案&#xff0c;点击文字滑动和手势触屏滑动&#xff0c;功能简单&#xff0c;具体实现代码如下所示&#xff1a; 1、wxss代码&#xff1a; /* 步骤条 */ .tab-box {display: flex;flex-direction: row;position: fix…

Netty服务器结合WebSocke协议监听和接收数据

目录 1.pom依赖2.配置属性3.创建netty服务器4.建立监听和响应5.创建启动器6.前端static下页面7.前端js8.注意异常问题9.创建netty服务器--使用守护线程 1.pom依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId>&l…

Spring集成hazelcast实现分布式缓存

1.Hazelcast介绍 Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品&#xff0c;提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map&#xff0c;Queue&#xff0c;ExecutorService&#xff0c;Lock和JCache等Java的许多开发人员友好的分布式实现。 Hazelcast优…

DM数据库(docker)

docker安装 安装必要的系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 配置阿里云Docker Yum源: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum缓存 yum makecache fast 安装docker-CE: y…

微机二次消谐装置是怎样运行的

微机二次消谐装置是怎样运行的&#xff1f;微机二次消谐装置是一种用于电力系统中的无功补偿和谐波控制的装置&#xff0c;它采用先进的数字信号处理技术和微机控制技术&#xff0c;能够实现对电力系统中的无功功率和谐波进行快速有效的控制和补偿&#xff0c;以保证电力系统的…

Kotlin入门基础知识

前言 实践是最好的学习方式&#xff0c;技术也如此。 文章目录 前言1、安装 Java 和 Kotlin 环境2、程序基本结构3、数据类型1&#xff09;基本数据类型2&#xff09;布尔类型3&#xff09;字符类型4&#xff09;字符串类型 1、安装 Java 和 Kotlin 环境 2、程序基本结构 fun…

【JavaScript】变量的解构赋值

变量的解构赋值用途很多。 &#xff08;1&#xff09;交换变量的值 let x 1; let y 2;[x, y] [y, x];上面代码交换变量x和y的值&#xff0c;这样的写法不仅简洁&#xff0c;而且易读&#xff0c;语义非常清晰。 &#xff08;2&#xff09;从函数返回多个值 函数只能返回…

Issue 2046:Missing array size check in NewFixedArray

文章目录 环境搭建漏洞分析漏洞触发 漏洞利用总结参考 环境搭建 sudo apt install pythongit reset --hard 64cadfcf4a56c0b3b9d3b5cc00905483850d6559 export DEPOT_TOOLS_UPDATE0 gclient sync -D// debug version tools/dev/v8gen.py x64.debug ninja -C out.gn/x64.debug/…

备战蓝桥杯Day29 - 贪心-活动选择问题

问题描述 假设有n个活动&#xff0c;这些活动要占用同一片场地&#xff0c;而场地在某时刻只能供一个活动使用。 每个活动都有一个开始时间 si 和结束时间 fi (题目中时间以整数表示) ,表示活动在[si, f)区间占用场地。 问:安排哪些活动能够使该场地举办的活动的个数最多? 解…

FDA: 用于语义分割的傅里叶域自适应

论文链接&#xff1a;https://arxiv.org/abs/2004.05498 代码链接&#xff1a;GitHub - YanchaoYang/FDA: Fourier Domain Adaptation for Semantic Segmentation 机构&#xff1a;UCLA 发表于2020CVPR 这篇文章别的地方略读了&#xff0c;主要看看方法&#xff0c;感兴趣自…

【C语言】命令行参数;终止程序

终端命令行参数 On many systems, it is possible to pass arguments to main from a command line by including parameters int argc and char argv[] in the parameter list of main. Parameter argc receives the number of command-line arguments. Parameter argv is an …

如何理解“高频信息/高级语义”和“低频信息/低级语义”?

如何区分高频信息和低频信息&#xff1f; 如果一个东西是高度离散化和语义化的&#xff0c;一个字的差异也可能导致词语之间的含义发生重大变化&#xff0c;就是高频东西。例如一句话&#xff0c;如果你改变了一个单词&#xff0c;这个句子就会变成其他的意思。还有就是经过en…

部署高斯喷射项目gaussian-splatting

硬件要求 支持 CUDA 的 GPU&#xff0c;具有 7.0 的计算能力24 GB VRAM 软件要求 Conda用于 PyTorch 扩展的 C 编译器&#xff08;Visual Studio 2019&#xff09; CUDA SDK 11 for PyTorch 扩展&#xff0c;在 Visual Studio 之后安装C 编译器和 CUDA SDK 必须兼容 拉取源码 …