邻接表STL版
时间:2021-08-02
本文章向大家介绍邻接表STL版,主要包括邻接表STL版使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考文献的话就不用再看它了)。
假设洛谷博客里面一共有 n(n <= 105) 篇文章(编号为 1 到 n)以及 m(m*≤106) 条参考文献引用关系。目前小 K 已经打开了编号为 1 的一篇文章,请帮助小 K 设计一种方法,使小 K 可以不重复、不遗漏的看完所有他能看到的文章。
这边是已经整理好的参考文献关系图,其中,文献 X → Y 表示文章 X 有参考文献 Y。不保证编号为 1 的文章没有被其他文章引用。
请对这个图分别进行 DFS 和 BFS,并输出遍历结果。如果有很多篇文章可以参阅,请先看编号较小的那篇(因此你可能需要先排序)。
输入格式
无
输出格式
无
输入输出样例
输入 #1复制
8 9
1 2
1 3
1 4
2 5
2 6
3 7
4 7
4 8
7 8
输出 #1复制
1 2 5 6 3 7 8 4
1 2 3 4 5 6 7 8
邻接表
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
vector<int> G[N];
int n, m;
bool visited[N];
queue<int> q;
//x指当前所在的结点,cur值已经遍历过的结点个数
void dfs(int x, int cur) {
visited[x] = true;
cout << x << " ";
if (cur == n) return;
for (int i = 0; i < G[x].size(); i++) {
if (!visited[G[x][i]]) {
dfs(G[x][i], cur + 1);
}
}
}
void bfs(int x) {
memset(visited, false, sizeof(visited));
visited[x] = true;
q.push(x);
while (!q.empty()) {
int v = q.front();
q.pop();
cout << v << " ";
for (int i = 0; i < G[v].size(); i++) {
if (!visited[G[v][i]]) {
visited[G[v][i]] = true;
q.push(G[v][i]);
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
G[u].push_back(v); // 标准邻接表构建有向图
}
for (int i = 1; i <= n; i++) {
//sort(G[i].begin(), G[i].end()); //标准排序
}
dfs(1, 0);
cout << endl;
bfs(1);
cout << endl;
return 0;
}
原文地址:https://www.cnblogs.com/mrmrwjk/p/15089731.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【奇技淫巧】-- 原地旋转链表
- 【奇技淫巧】-- 盛水最多的容器
- 【leetcode两题选手】MySQL类题目(八)
- 【leetcode两题选手】MySQL类题目(七)
- 【leetcode两题选手】MySQL类题目(六)
- 【leetcode两题选手】MySQL类题目(五)
- 【leetcode两题选手】MySQL类题目(四)
- 【leetcode两题选手】MySQL类题目(三)
- 【leetcode两题选手】MySQL类题目(二)
- 剑指offer(01-03)题解
- mybatis动态sql之分支选择(学习choose、when、otherwise标签)
- 前后端分离使用pagehelper
- 还在手写单表的增删改查??还不快快使用通用mapper
- mybatis动态sql之遍历集合(学习foreach标签(初探))
- mybatis动态sql之修改(学习set标签)