Input

5 7

1 2

2 3

3 4

1 3

4 1

1 5

4 5

output

1 5 3 4 2

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 150;
  4. const int maxm = 1050;
  5. int n, m;//顶点数,边数
  6. int head[maxm], tot;
  7. bool used[maxn];
  8. //head[u]表示已知的最后一条以u为起点的边在边集e中的下标
  9. struct edge {
  10. int to, next;
  11. //e[i].to表示边的终点,e[i].next表示上一条和边e[i]起点相同的点在e中的下标
  12. //int w;权值
  13. }e[maxm];//边集
  14. void init() {
  15. tot = 0;
  16. memset(head, -1, sizeof(head));
  17. memset(used, 0, sizeof(used));
  18. }
  19. void add(int u, int v) {//在图中加边
  20. //e[tot].w = w
  21. e[tot].to = v;
  22. e[tot].next = head[u];
  23. head[u] = tot++;
  24. }
  25. void dfs(int u) {
  26. used[u] = 1;
  27. printf("%d ", u);
  28. for (int i = head[u]; i != -1; i = e[i].next) {//遍历的方式
  29. int v = e[i].to;
  30. if (!used[v]) dfs(v);
  31. }
  32. }
  33. int main() {
  34. while (scanf("%d%d", &n, &m) == 2) {
  35. init();
  36. for (int i = 1; i <= m; ++i) {
  37. int from, to;
  38. scanf("%d%d", &from, &to);
  39. add(from, to);
  40. //add(to, from)无向图
  41. }
  42. for (int i = 1; i <= n; ++i) {
  43. if (!used[i] && head[i] != -1) dfs(i);
  44. }
  45. printf("\n");
  46. }
  47. return 0;
  48. }
  49. /*
  50. 5 7
  51. 1 2
  52. 2 3
  53. 3 4
  54. 1 3
  55. 4 1
  56. 1 5
  57. 4 5
  58. 1 5 3 4 2
  59. */

链式前向星和邻接表的思想是一样的,

区别就是:邻接表是用链表实现的,可以动态的增加边;

而链式前向星是用结构体数组实现的,是静态的,需要一开始知道数据范围,开好数组大小。

相比之下,邻接表灵活,链式前向星好写。

链式前向星写法下的DFS和BFS的更多相关文章

  1. Pants On Fire(链式前向星存图、dfs)

    Pants On Fire 传送门:链接  来源:upc9653 题目描述 Donald and Mike are the leaders of the free world and haven't ...

  2. 链式前向星DFS

    本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html 采用链式前向星存图的DFS: #include <iostream> #include ...

  3. 链式前向星+SPFA

    今天听说vector不开o2是数组时间复杂度常数的1.5倍,瞬间吓傻.然后就问好的图表达方式,然后看到了链式前向星.于是就写了一段链式前向星+SPFA的,和普通的vector+SPFA的对拍了下,速度 ...

  4. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  5. 图的存储结构:邻接矩阵(邻接表)&链式前向星

    [概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...

  6. 最短路 spfa 算法 && 链式前向星存图

    推荐博客  https://i.cnblogs.com/EditPosts.aspx?opt=1 http://blog.csdn.net/mcdonnell_douglas/article/deta ...

  7. 链式前向星版DIjistra POJ 2387

    链式前向星 在做图论题的时候,偶然碰到了一个数据量很大的题目,用vector的邻接表直接超时,上网查了一下发现这道题数据很大,vector可定会超的,不会指针链表的我找到了链式前向星这个好东西,接下来 ...

  8. HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】

    最开始学最短路的时候只会用map二维数组存图,那个时候还不知道这就是矩阵存图,也不懂得效率怎么样 经过几个月的历练再回头看最短路的题, 发现图可以用链式前向星来存, 链式前向星的效率是比较高的.对于查 ...

  9. 前向星&链式前向星

    参考博文: https://blog.csdn.net/acdreamers/article/details/16902023 前向星 len[i]以i为起点的边在数组中的存储长度 head[i]以i ...

随机推荐

  1. P2066 机器分配

    题目背景 无 题目描述 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国家提供一定的盈利.问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值.其中M≤15 ...

  2. [Leetcode] Anagrams 颠倒字母构成词

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  3. BZOJ_day4&&DSFZ_day1

    昨天坐火车才水了三道题... 25题 100810221041105110591087108811791191119212571303143218541876195119682140224224382 ...

  4. BZOJ day1

    十题击破  1051108811921432195119682242245624632761

  5. 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp

    打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并 ...

  6. Small things are better

    Yesterday I had fun time repairing 1.5Tb ext3 partition, containing many millions of files. Of cours ...

  7. [hdu 4417]树状数组+离散化+离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 把数字离散化,一个查询拆成两个查询,每次查询一个前缀的和.主要问题是这个数组是静态的,如果带修改 ...

  8. HTML5 视频直播

    目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要技术点也要有所了解,本次分享就向大家介绍一下其中的奥秘. 内容大体框架:  ...

  9. Sync Data to AWS S3 on Windows Box

    1. Install AWS CLI first, windows download link https://s3.amazonaws.com/aws-cli/AWSCLI64.msi 2. The ...

  10. MySQL rpm 版本安装

     准备: [root@localhost moudles]# ls MySQL-client-5.6.36-1.linux_glibc2.5.x86_64.rpm MySQL-server-5.6.3 ...