(是时候为五一培训准备真正的技术了qwq)

  • part1  队列(FIFO)

    • 算法简介:

FIFO:First In First Out(先进先出)

队列是限定在一端进行插入,另一端进行删除的特殊线性表。

允许出队的一头叫做队头(head||front),允许出队的一端称为队尾(rear||tail)所有需要进队的数据项,只能从队尾进入,队列中的数据只能从队头离去qwq。


今天wz小姐姐讲惹一小时滴不知道有什么用滴东西qwq,这里做个笔记吧ヽ(•̀ω•́ )ゝ

1.队列在c语言中的语法?

No.1头文件:#include<queue>

No.2统统搞一块了不管了qwq:

成员函数:

搞到一个神奇的代码qwq:

#include <queue>
#include <iostream>
using namespace std;
int main() {
queue<int> myQ; //疑似定义了一个队列q
for(int i=; i<; i++) {
myQ.push(i);//把0~9入队
cout<<"myQ size is: "<<myQ.size()<<endl;//输出i这个元素入队之后队列的长度
}
for(int i=; i<myQ.size(); i++) {
cout <<"the first:"<< myQ.front()<<endl; //输出第一个数
myQ.pop(); //删掉第一个数(队列的长度减小了)
cout<<"wz is little sister:"<<myQ.size()<<endl; //证明它确实减小了 彩蛋qwq
}
cout<<"this is amazing!"<<endl;
return ;
}

另外还有栈:stack??头文件的话就是#include<stack>

用法和queue差不多,请自行百度qwq


算法标签:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,p=,k=;
int a[];
int main()
{
scanf("%d%d",&n,&m);
int j=n;
for(int i=;i<n;i++)a[i]=i+;
a[n]=;
while(p<n){
while(k<m){
printf("%d a w i k o z i %d\n",j,a[j]);
j=a[j];k++;//为了方便理解,这里加了两句输出
printf("%d a y i k o y i %d\n",j,a[j]);
puts("-------------------");
}
printf("我是答案qwq:%d\n",a[j]);p++;
a[j]=a[a[j]];k=;
}
return ;
}
 

写在bfs之前:

关于lower_bound和upper_bound:

这个神奇的东西一直只是见过,咋用完全不会之前,所以今天wz跟我们讲(xian)题(che)时候顺(zhuang)带(bi)的讲了一下。

写在语法之前:头文件:#include<algorithm>(某些人疑似叫它阿拉狗日thm)

lower_bound和upper_bound都是在sort过以后使用的,(要不然用它没有意义啊qwq

1.语法:

lower_bound(a+1,a+n+1,r)①//表示在数组a中从a[1]位置到a[n]位置找到第一个大于或等于r的数,返回该数的地址

upper_bound(a+1,a+n+1,r)②//表示在数组a中从a[1]位置到a[n]位置找到第一个大于r的数,返回该数的地址

如何用lower_bound和upper_bound判断数r在某个部分(用部分吧,用数组不是很严谨qwq)是否存在:①==②?不存在:存在(突然想写三目运算符(大概写对了吧)

求序列中有几个r:②-①;

求某个数r的下标:lower_bound(a+1,a+n+1,r)-a(no why)

行吧大致补充就end-了


  • part2 bfs(广度优先搜索):

    • 算法描述qwq:Breadth First Search

所谓宽度优先。就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。

这样做的结果是,BFS 算法找到的路径是从起点开始的 最短 合法路径。换言之,这条路所包含的边数最小。

在 BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。(from oi-***)

    • 伪代码:
bfs(s) {
q = new queue()
q.push(s)), visited[s] = true
while (!q.empty()) {
u = q.pop()
for each edge(u, v) {
if (!visited[v]) {
q.push(v)
visited[v] = true
}
}
}
}//from oi-**(我没直接把一本通的打上来已经不错了qwq 色号#f4f4f4

eg:【洛谷p1451求细胞数量】

算法标签(显然搜索):

(你猜它来自哪pulapula懒死算了qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
char s[];
int n,m,ans=;
bool pan[][];
int dx[]={,,,-,};
int dy[]={,,,,-};
void bfs(int a,int b){
int h[][],x,y;
int t=,w=;
ans++;pan[a][b]=;
h[][]=a;h[][]=b;
do{
t++;//丢掉了qwq
for(int i=;i<=;i++){
x=h[t][]+dx[i];
y=h[t][]+dy[i];
if((pan[x][y])&&(x<=n)&&(y<=m)&&(x>)&&(y>))
{
w++;
h[w][]=x;
h[w][]=y;
pan[x][y]=;
}
}
}while(t<w);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
pan[i][j]=;
for(int i=;i<=n;i++){
scanf("%s",s);
for(int j=;j<m;j++){//字符数组从零开始啊喂qwq
if(s[j]=='')pan[i][j+]=;//从j零开始的话要加1呢qwq
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(pan[i][j]) bfs(i,j);
printf("%d",ans);
}

大概可能没啥了吧qwq???

end-

【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】的更多相关文章

  1. 洛谷 P1451 求细胞数量

    题目链接 https://www.luogu.org/problemnew/show/P1451 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字 ...

  2. 洛谷P1451 求细胞数量

    求细胞数量 题目链接 这道题大概是一个最简单的联通块的题了qwq 注意枚举起点的时候 一定不要从0开始不然你就会从0进入到了其他联通块中从而多查. 一定看清题意这道题不是同色为联通块!!! AC代码如 ...

  3. 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】

    1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...

  4. 洛谷——P1451 求细胞数量

    P1451 求细胞数量 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=10 ...

  5. 【vector的输出问题】 洛谷 P1996 约瑟夫问题

    题目:P1996 约瑟夫问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 可恶啊,本来是一道不算难的题,硬是因为cin,cout同步流卡了我一天qwq 关闭cin,cout同步流 ...

  6. [洛谷]p1996约瑟夫环 &xdoj1311

    https://www.luogu.org/problemnew/show/P1996 约瑟夫环这个问题一直以来都是用循环链表写的,今天才知道有循环队列的写法.以下是要点: 1.循环队列实现环的思想, ...

  7. 洛谷——P1996 约瑟夫问题

    P1996 约瑟夫问题 (什么?!要给学弟学妹讲约瑟夫问题?!难道就不怕我给他们讲错了吗?! 啊啊啊,为了不给学弟学妹们讲错,蒟蒻表示要临阵磨一下刀...) 题目背景 约瑟夫是一个无聊的人!!! 题目 ...

  8. 洛谷P1996 约瑟夫问题【队列】

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,--依次类推,直到所有的人都出 ...

  9. 洛谷P1996 约瑟夫问题【链表】

    题目:https://www.luogu.org/problemnew/show/P1996 题意: 约瑟夫环.每次取出第m个,第2m个...... 思路: 链表维护.[感觉很少有用到链表.]非常经典 ...

随机推荐

  1. 记一次ADG备库归档目录满导致的延时处理

    报错如下,原因是存放传过来的归档的目录+HWAREDODG满了,MRP进程无法应用归档,我在手动传了几个归档之后发现不是GAP,select * from V$ARCHIVE_GAP 显示没有GAP. ...

  2. nodejs构建mock数据

    Nodejs构建mock数据并通过rest api风格调用接口访问数据 如果我们只有json格式的数据文件,我们想通过访问url方式调用居然数据 确保电脑安装node环境 如果你没有安装好node环境 ...

  3. SQL Server (MSSQLSERVER) 服务由于下列服务特定错误而终止: %%17051

    问题出现:今天在给客户调试项目的时候,发现无法连接SQL server数据库 解决过程:1.在cmd命令窗口输入services.msc,打开服务窗口,找到SQL Server (MSSQLSERVE ...

  4. python进阶之 线程编程

    1.进程回顾 之前已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程 ...

  5. (玩起来)DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比

    盆友们,边看文章边玩,请耐心等待PowerBI load出来~~~~ (7.8秒钟) DAX/PowerBI系列 - 参数表(Parameter Table) - 多时间段数值对比 难度: ★☆☆☆☆ ...

  6. 小程序 navigator 无法跳转 tabBar上的页面

    解决方法一: navigator 的 open-type 设置为 switchTab 解决方法二: 使用 wx.switchTab({ url: ‘../cart/index’ }) 进行跳转

  7. C#设计模式(7)——适配器模式(Adapter Pattern)(转)

    一.引言 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用 ...

  8. log4j:WARN No appenders could be found for logger 解决方案

    我们在使用Log4j的时候,总是出现: log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.Log ...

  9. phpcms网页替换验证码功能 及 搜索功能

    在使用phpcms替换网页的时候,除了正常的替换栏目.内容页等,其他的什么验证码啦,提交表单了,搜索功能了,这些在替换的时候可能会对一些默认文件有一些小小 的改变 下面就是自己在失败中成功的过程,最后 ...

  10. python 构造一个可以返回多个值的函数

    为了能返回多个值,函数直接return 一个元组就行了 看上去返回了多个值,实际上是先创建了一个元组然后返回的.这个语法看上去比较奇怪,实际上我们使用的是逗号来生成一个元组,而不是用括号 >&g ...