遍历图(dfs)

简介: 遍历图(dfs)

题目描述



给出N 个点,M 条边的有向图,对于每个点 v,求A(v) 表示从点 v出发,能到达的编号最大的点。


输入格式



第1 行,2 个整数 N,M。

接下来 M行,每行2个整数 Ui,Vi,表示边 (Ui,Vi)。点用 1,2,⋯,N编号。


输出格式



N 个整数 A(1),A(2),⋯,A(N)。


输入输出样例



输入 #1复制

4 3
1 2
2 4
4 3


输出 #1复制

4 4 3 4


说明/提示



• 对于60% 的数据, 1≤N.M≤ 10^3;

• 对于100% 的数据,  1≤N,M≤10^5 。


#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define MAXL 100010
int N, M, A[MAXL];
vector<int> G[MAXL]; //vector存图 
void dfs(int x, int d) {
  if(A[x]) return; //访问过 就是不为0 
  A[x] = d;
  for(int i=0; i<G[x].size(); i++)  
    dfs(G[x][i], d);
}   
int main() {
  int u, v;
  scanf("%d%d", &N, &M);
  for(int i=1; i<=M; i++) {
    scanf("%d%d", &u, &v);
    G[v].push_back(u); //反向建边 
  }
  for(int i=N; i; i--) 
  dfs(i, i); 
  for(int i=1; i<=N; i++) 
  printf("%d ", A[i]);
  printf("\n");
  return 0;
}


相关文章
|
6月前
|
算法
Hierholzer算法dfs找欧拉回路模板
Hierholzer算法dfs找欧拉回路模板
69 0
|
5月前
|
人工智能 算法 Java
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。
|
6月前
|
算法
深度优先搜索(DFS)的基础理解与实现
深度优先搜索(DFS)的基础理解与实现
80 0
|
11月前
|
算法 测试技术 C#
C++深度优先搜索(DFS)算法的应用:树中可以形成回文的路径数
C++深度优先搜索(DFS)算法的应用:树中可以形成回文的路径数
|
存储 算法 索引
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
【霍罗维兹数据结构】GRAPH 图 | 基本图运算 DFS&BFS | 最小代价生成树
106 0
|
存储 机器学习/深度学习 人工智能
邻接矩阵存储图的深度优先遍历(dfs)和广度优先遍历(bfs)
邻接矩阵存储图的深度优先遍历(dfs)和广度优先遍历(bfs)
191 0
|
存储 C++
C++实现图 - 02 图的遍历(DFS、BFS)
上一讲我们对图有了一个大概的了解,但是只讲了如何存储图,还没有讲如何遍历图。这一讲我们来介绍图的遍历方式,一共分为深度优先搜索(DFS)和宽度优先搜索(BFS)。
527 0
C++实现图 - 02 图的遍历(DFS、BFS)
7-121 深入虎穴 (25 分)(dfs,bfs)
7-121 深入虎穴 (25 分)(dfs,bfs)
162 0
Leetcode --- 树的遍历(DFS/BFS)
Leetcode --- 树的遍历(DFS/BFS)
Leetcode --- 树的遍历(DFS/BFS)
【LeetCode133】克隆图(dfs和unordered_map)
节点数不超过 100 。 每个节点值 Node.val 都是唯一的,1 <= Node.val <= 100。
106 0
【LeetCode133】克隆图(dfs和unordered_map)