news 2026/8/3 3:31:52

算法-DFS+BFS+拓扑排列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法-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;
}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 3:31:15

GetQzonehistory:三步轻松备份你的QQ空间十年回忆

GetQzonehistory&#xff1a;三步轻松备份你的QQ空间十年回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾打开QQ空间&#xff0c;翻看多年前的说说&#xff0c;那些记录青春…

作者头像 李华
网站建设 2026/8/3 3:31:01

boss项目 岗位搜索与详情,简历中心和投递

职位搜索 from datetime import date, datetime from enum import Enum from typing import Any, Optionalfrom elasticsearch import AsyncElasticsearch from elasticsearch.helpers import async_bulk from fastapi import Depends, APIRouter, Queryfrom app.core.depends…

作者头像 李华
网站建设 2026/8/3 3:30:36

临床预测模型快速入门:基于Python与AutoML的实践指南

这次我们来看一个关于临床预测模型自学的项目。标题“自学三天&#xff0c;学会了临床预测模型&#xff01;我就是最棒的小羊”听起来像是一个学习者的经验分享&#xff0c;但背后指向的是一个非常具体的技术实践&#xff1a;如何在短时间内&#xff0c;利用现有的开源工具和框…

作者头像 李华
网站建设 2026/8/3 3:23:31

射频工程师成长指南:从理论到实践,突破独立设计三大关卡

最近和一位刚入行的朋友聊天&#xff0c;他拿着公司给的参考设计&#xff0c;对照着画了一块射频板&#xff0c;结果回来测试&#xff0c;指标一塌糊涂。他问我&#xff1a;“原理图、PCB我都照着画了&#xff0c;用的芯片也一样&#xff0c;为什么我的就不行&#xff1f;” 我…

作者头像 李华
网站建设 2026/8/3 3:22:52

springboot 奖助学金申报与评审系统

一、关键词 奖助学金申报与评审系统、奖助学金申报与评审、奖助学金申报与评审信息管理、奖助学金申报与评审后台管理 二、作品包含 源码数据库万字设计文档PPT全套环境和工具资源本地部署教程 三、项目技术 前端技术&#xff1a; Html、Css、Js、Vue2.6、Element-ui 后端技…

作者头像 李华