当前位置: 首页 > news >正文

算法-DFS+BFS+拓扑排列

DFS

例题:acwing842

vector<int>num;
vector<bool>used;
int n;
void dfs(vector<int>& selected)
{
if (selected.size() == n)
{
for (int i = 0; i < n; i++)
{
cout << selected[i] << ' ';
}
cout << endl;
return;
}
for (int i = 0; i < n; i++)
{
if (!used[i])
{
used[i] = true;
selected.push_back(num[i]);
dfs(selected);
used[i] = false; //一定used和selected都要还原
selected.pop_back();
}
}
}

int main()
{
cin >> n;
num.resize(n);
used.resize(n);
for (int i = 0; i < n; i++)
{
num[i] = i + 1;
}
vector<int>selected = {};
dfs(selected);
return 0;
}

BFS

例题:acwing844

int n, m;
vector<vector<int>>graph;
vector<vector<int>>ans; //不用used数组,直接存储所有的答案
int dirx[4] = { -1,1,0,0 };
int diry[4] = { 0,0,-1,1 };
void bfs()
{
queue<pair<int, int>>que;
que.push({ 0,0 });
ans[0][0] = 0; //要单独初始化为0
while (!que.empty())
{
auto curr = que.front();
que.pop();
for (int i = 0; i < 4; i++)
{
int currx = curr.first + dirx[i];
int curry = curr.second + diry[i];
if (!(currx >= 0 && currx < n && curry >= 0 && curry < m))
continue;
if (ans[currx][curry] != -1 || graph[currx][curry] == 1) //一定要判断是不是障碍物
continue;
que.push(make_pair(currx, curry));
ans[currx][curry] = ans[curr.first][curr.second] + 1;
}
}
}

int main()
{
cin >> n >> m;
graph.resize(n, vector<int>(m));
ans.resize(n, vector<int>(m, -1));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> graph[i][j];
}
bfs();
cout << ans[n - 1][m - 1] << endl;
return 0;
}

拓扑排序

例题:acwing848

int n, m;
vector<vector<int>>graph;
vector<int>ans;
vector<int>indegree;
void bfs()
{
queue<int>que;
for (int i = 1; i <= n; i++)
{
if (!indegree[i])
que.push(i);
}
while (!que.empty())
{
auto curr = que.front();
ans.push_back(curr);
que.pop();
for (int i = 0; i < graph[curr].size(); i++)
{
int temp = graph[curr][i];
indegree[temp]--;
if (!indegree[temp])
que.push(temp);
}
}
if (ans.size() != n)
cout << -1 << endl;
else
for (int i = 0; i < n; i++)
{
cout << ans[i] << ' ';
}
}

int main()
{
cin >> n >> m;
graph.resize(n + 1);
indegree.resize(n + 1, 0);
while (m--)
{
int a, b;
cin >> a >> b;
graph[a].push_back(b);
indegree[b]++; //记得统计入度
}
bfs();
return 0;
}

http://www.cnnetsun.cn/news/3807435.html

相关文章:

  • GetQzonehistory:三步轻松备份你的QQ空间十年回忆
  • boss项目 岗位搜索与详情,简历中心和投递
  • 临床预测模型快速入门:基于Python与AutoML的实践指南
  • 【2026年拼多多暑期实习/秋招- 8月2日-第四题- 环形分厂协调补货】(题目+思路+JavaC++Python解析+在线测试)
  • 射频工程师成长指南:从理论到实践,突破独立设计三大关卡
  • springboot 奖助学金申报与评审系统
  • 从教程到实战:构建个人博客系统的全链路开发思维与工程实践
  • XIAO ESP32-S3开发板快速上手:从硬件解析到实战编程
  • 计网八股--DNS的域名解析过程?
  • Unity移动端内存优化实战:从托管堆到本机堆的全面解决方案
  • 智能临时文件清理系统设计与企业级实践
  • 三相并联有源电力滤波器设计与dq0变换谐波抑制技术
  • Stable Diffusion图生图效率革命:批量处理提速300%的脚本+WebUI插件组合包(仅限前200名开发者领取)
  • 5分钟解锁网易云音乐NCM加密文件:免费工具实现跨平台音乐自由
  • 5分钟解锁英雄联盟全皮肤:R3nzSkin国服特供版完全指南
  • 智慧联网赋能移动医疗:基于VG710的一站式医疗车辆数字化解决方案
  • Flutter项目创建卡顿?深度解析网络、Gradle与Android SDK配置
  • AI辅助PPT制作:从内容生成到自动化排版的全流程实践
  • SqlSugar框架核心优势与高阶应用实战
  • 火车头采集器实战:从零到一掌握数据采集与自动化处理
  • 《鸣潮》3.5版图形渲染问题修复:MDO异常与远景贴图错误解决方案
  • 上海APP小程序一体化开发公司推荐
  • OpenHarmony多终端开发实战:从工程创建到代码托管
  • 解决Codex启动错误:端口访问权限问题(OS Error 10013)
  • SpringBoot+Vue+MySQL物业管理系统全栈开发指南
  • jQuery DOM操作深度解析:从核心原理到现代前端实践
  • CTF压缩包攻防实战:从文件分析到密码破解的完整技术栈
  • Spring Boot论坛系统开发:核心技术与实践指南
  • 如何快速找回7z/Zip/Rar加密压缩包密码:免费开源工具完整指南
  • Ubuntu 24.04 LTS x64有图形化界面吗?