链式前向星写法下的DFS和BFS

Input
5 7
1 2
2 3
3 4
1 3
4 1
1 5
4 5
output
1 5 3 4 2
#include<bits/stdc++.h>
using namespace std;
const int maxn = 150;
const int maxm = 1050;
int n, m;//顶点数,边数
int head[maxm], tot;
bool used[maxn];
//head[u]表示已知的最后一条以u为起点的边在边集e中的下标
struct edge {
int to, next;
//e[i].to表示边的终点,e[i].next表示上一条和边e[i]起点相同的点在e中的下标
//int w;权值
}e[maxm];//边集
void init() {
tot = 0;
memset(head, -1, sizeof(head));
memset(used, 0, sizeof(used));
}
void add(int u, int v) {//在图中加边
//e[tot].w = w
e[tot].to = v;
e[tot].next = head[u];
head[u] = tot++;
}
void dfs(int u) {
used[u] = 1;
printf("%d ", u);
for (int i = head[u]; i != -1; i = e[i].next) {//遍历的方式
int v = e[i].to;
if (!used[v]) dfs(v);
}
}
int main() {
while (scanf("%d%d", &n, &m) == 2) {
init();
for (int i = 1; i <= m; ++i) {
int from, to;
scanf("%d%d", &from, &to);
add(from, to);
//add(to, from)无向图
}
for (int i = 1; i <= n; ++i) {
if (!used[i] && head[i] != -1) dfs(i);
}
printf("\n");
}
return 0;
}
/*
5 7
1 2
2 3
3 4
1 3
4 1
1 5
4 5
1 5 3 4 2
*/
链式前向星和邻接表的思想是一样的,
区别就是:邻接表是用链表实现的,可以动态的增加边;
而链式前向星是用结构体数组实现的,是静态的,需要一开始知道数据范围,开好数组大小。
相比之下,邻接表灵活,链式前向星好写。
链式前向星写法下的DFS和BFS的更多相关文章
- Pants On Fire(链式前向星存图、dfs)
Pants On Fire 传送门:链接 来源:upc9653 题目描述 Donald and Mike are the leaders of the free world and haven't ...
- 链式前向星DFS
本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html 采用链式前向星存图的DFS: #include <iostream> #include ...
- 链式前向星+SPFA
今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...
- 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板
一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...
- 图的存储结构:邻接矩阵(邻接表)&链式前向星
[概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...
- 最短路 spfa 算法 && 链式前向星存图
推荐博客 https://i.cnblogs.com/EditPosts.aspx?opt=1 http://blog.csdn.net/mcdonnell_douglas/article/deta ...
- 链式前向星版DIjistra POJ 2387
链式前向星 在做图论题的时候,偶然碰到了一个数据量很大的题目,用vector的邻接表直接超时,上网查了一下发现这道题数据很大,vector可定会超的,不会指针链表的我找到了链式前向星这个好东西,接下来 ...
- HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...
- 前向星&链式前向星
参考博文: https://blog.csdn.net/acdreamers/article/details/16902023 前向星 len[i]以i为起点的边在数组中的存储长度 head[i]以i ...
随机推荐
- STL map、set中key为结构体的用法
下面是map定义的结构: // TEMPLATE CLASS map template<class _Kty, class _Ty, class _Pr = less<_Kty>, ...
- clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
clientWidth.clientHeight.offsetWidth.offsetHeight以及scrollWidth.scrollHeight是几个困惑了好久的元素属性,趁着有时间整理一下 1 ...
- 【NOIP2017 D1 T1 小凯的疑惑】
题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...
- git使用笔记(五)打标签
By francis_hao Nov 19,2016 当一个项目commit了若干次到了一个可以发布版本的时候一般会给当前的分支状态打一个标签,就像我们常常见到的V1.0之类的. Git 使用的 ...
- vue入门知识
vue的特点在于:响应的数据绑定.组合的视图组件. vue的文件,分成三个部分<template>html模板</template> <script>js< ...
- 【洛谷 P1251】 餐巾计划问题 (费用流)
题目链接 我做的网络流24题里的第一题.. 想是不可能想到的,只能看题解. 首先,我们拆点,将一天拆成晚上和早上,每天晚上会受到脏餐巾(来源:当天早上用完的餐巾,在这道题中可理解为从原点获得),每天早 ...
- [bzoj3597][scoi2014]方伯伯运椰子——分数规划,负环
题解 目标就是 \[Maximize\ \lambda = \frac{X-Y}{k}\] 按照分数规划的一般规律, 构造: \[g(\lambda) = \lambda k + Y - X\] 由于 ...
- bzoj 1798 维护序列seq 线段树
裸的线段树,注意标签下放就行了 多么痛的领悟,一定要开int64 /************************************************************** Pro ...
- HDU1284 钱币兑换问题
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- linux下检测可用串口并使用minicom打开(改进版)
之前使用的方式是这样的 http://www.cnblogs.com/zqb-all/p/7073612.html 这两天看到minicom的参数,可以直接使用 -D 指定设备,于是修改成了这样 建立 ...