深搜+广搜+优先队列排序规则
2023-08-20 14:54:23
发布于:河北
深搜:
一条路走到底,不撞南墙不回头!
深搜英文简写:
dfs();
广搜:
广搜英文简写:
bfs();
伪代码:
void bfs()
{
队列q
//1.初始化
起点入队,标记
//2.队列进行
while(队列不空)
{
取队头,出队
for(做选择)
{
//3.找到终点(做短路)
if(终点)
{
return xx;
}
if(不能选)
{
continue;
}
新点入队,标记
}
}
//4.对空,没有路径
return -1;
}
优先队列排序规则:
#include <bits/stdc++.h>
using namespace std;
// STL stack 栈
// stack<数据类型> 栈容器名;
/* 方法函数:
入栈 push(数据); 将数据放入栈
栈顶 top(); 返回栈顶的数据-非空才可以操作
出栈 pop(); 将栈顶元素出栈-非空才可以操作
大小 size(); 返回栈内数据个数
空栈 empty(); 如果栈内没有数据,返回为 true
*/
// STL queue 队列
// queue<数据类型> 队列容器名;
/* 方法函数:
入队 push(数据); 将数据放入队列中
队首 front(); 返回队首数据
队尾 back(); 返回队尾数据
出队 pop(); 删除队首数据
大小 size(); 返回队列的数据个数
空队 empty(); 如果是空队,返回 true
*/
// STL priority_queue 优先队列
// 默认是数据类型数值越大 优先出队
// priority_queue<数据类型> 优先队列容器名;
// 按照队列中数据的优先级越高的越先出
/* 方法函数:
入队 push(数据); 将数据放入优先队列中
队首 top(); 返回队首数据
出队 pop(); 删除队首数据
大小 size(); 返回优先队列的数据个数
空队 empty(); 如果是空队,返回 true
*/
//总共有 n 个人 1~n,报数报到 m 数字出队,如果没有出队排到队尾的末尾,
//求最后一个剩余队伍中的编号。
// 优先队列对结构体进行自定义优先级
struct peo {
string name; // 姓名
int id; // 学号
double score; // 分数
// 分数越高 优先级越大,如果分数相等 学号小的 优先级越大
// 1. 在结构体中写标准模板
// 2. 添加同一个 b 变量 和 cmp 一致
// 3. cmp 填写规则 关于添加的b. 删除
// 标准模板 bool operator < (const 结构体类型 &a) const { ... }
bool operator < (const peo &a) const {
if (a.score != score) return a.score > score;
return a.id < id;
}
};
priority_queue<peo> q;
int main() {
// 输入三个人的姓名和学号和分数
for (int i = 1; i <= 3; i++) {
peo a;
cin >> a.name >> a.id >> a.score;
q.push(a);
}
while (!q.empty()) {
peo a = q.top();
q.pop();
cout << a.name << "\n";
}
return 0;
}
这里空空如也
有帮助,赞一个