【图论】链式前向星实现图的BFS搜索

💫【图论】链式前向星–BFS宽搜遍历

👏宽搜背景和实现的功能

输入: n m

  • n:结点数量
  • m:边的数量

输出:到达结点编号为n的最短路径, 每条路长度为1(宽度搜索的前前提条件)

🤔思路:

  • 采用链式前向星存图+数组模拟队列的方法
  • 只要队列不为空,取出头结点作为待处理的结点
    • 对于每一个待处理的结点,优先判断是否已经进行过BFS搜索(防止进入有向图死循环)
    • 到达后继结点的距离为前继结点距离+1
    • 将该结点所有未处理过的后继节点加入队列中等待处理

⌨️Code

#include <iostream>
#include <cstring>
using namespace std;
//宽搜遍历图

const int N = 10001;
int head[N], next[N], to[N], idx;
int d[N], q[N];
int n, m;

inline void add(int u, int v) {
	to[idx] = v, next[idx] = head[u], head[u] = idx++;
}

inline int dfs() {
	int hh = 0, tt = 0;
	//定义队头和队尾
	q[0] = 1;					// 起点 1
	memset(d, -1, sizeof d);	//d[u] 为 -1 表示没有宽度搜索过该结点 
	d[1] = 0;					//d[u] 表示到达结点 u的最小距离 
	while (hh <= tt) {			//队列不空 
		int t = q[hh ++];		//取得对头并出队
		for (int i = head[t]; i != -1; i = next[i]) {	//用 i 来遍历该节点所有指向的边 
			int j = to[i];							//j 表示边指向的值
			if (d[j] == -1) {						//如果该边指向的结点 j 没有被扩展过 
				d[j] = d[t] + 1;					//用当前结点的最短路径计算到达该结点的最短路径 
				q[++ tt] = j;						//该结点入队, 队尾指针后移并赋值 
			} 
		} 
	}
	return d[n];
}

 
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m;
	// n表示结点数量 m 表示边的数量 
	memset(head, -1, sizeof head);
	for (int i = 0; i < m; i++) {
		int u, v;
		cin >> u >> v;
		add(u, v);
	}
	cout << dfs() << endl;
}

相关推荐

  1. 实现BFS搜索

    2024-04-13 22:42:01       14 阅读
  2. +BFS实现拓扑排序(topSort)

    2024-04-13 22:42:01       13 阅读
  3. 表示2

    2024-04-13 22:42:01       38 阅读
  4. AcWing 851:spfa求最短路 ←

    2024-04-13 22:42:01       15 阅读
  5. 搜索——BFS

    2024-04-13 22:42:01       23 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 22:42:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 22:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 22:42:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 22:42:01       20 阅读

热门阅读

  1. Soulver v3.10.3.1 mac版 智能文本计算器 兼容 M1/M2/M3

    2024-04-13 22:42:01       21 阅读
  2. Ant Design Vue Table 自定义渲染与自定义单元格

    2024-04-13 22:42:01       13 阅读
  3. 【LeetCode刷题记录】76. 最小覆盖子串

    2024-04-13 22:42:01       11 阅读
  4. dfs板子

    dfs板子

    2024-04-13 22:42:01      11 阅读
  5. 蓝桥杯 2021 省 AB 2 洛谷P8755 负载均衡

    2024-04-13 22:42:01       17 阅读
  6. Linux防止暴力破解密码脚本

    2024-04-13 22:42:01       14 阅读
  7. mysql百万数据深分页问题

    2024-04-13 22:42:01       19 阅读
  8. 将master分支的暂存修改应用到新分支

    2024-04-13 22:42:01       14 阅读
  9. linux mount挂载终结方案,测试好再重启

    2024-04-13 22:42:01       17 阅读
  10. 【Tars-go】腾讯微服务框架学习使用02-- http 服务

    2024-04-13 22:42:01       17 阅读