博客
关于我
E - 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
阅读量:764 次
发布时间:2019-03-23

本文共 1667 字,大约阅读时间需要 5 分钟。

在这个问题中,我们需要判断天灾军团是否可以通过现有的通道从n号隘口到达1号隘口,如果可以,我们还需要找出最少需要经过的通道数量。

方法思路

这个问题可以看作是一个图的最短路径问题。具体来说,我们有一个有向图,其中节点表示隘口,边表示通道。我们需要找到从n号隘口到1号隘口的最短路径。如果不存在这样的路径,则输出“NO”。

为了解决这个问题,我们可以使用广度优先搜索(BFS),因为BFS能够在图中找到最短路径。我们从n号隘口开始,逐层搜索,直到到达1号隘口或所有可能的节点都已访问。每次访问一个新节点时,我们记录经过的通道数量,当找到目标节点时返回通道数量。

解决代码

#include 
#include
#include
using namespace std;struct Node { int data; int step; Node(int d, int s) : data(d), step(s) {}};bool BFS(Node start) { queue
q; bool visited[1005] = {false}; q.push(start); visited[start.data] = true; while (!q.empty()) { Node current = q.front(); q.pop(); if (current.data == 1) { return true; } for (int i = 1; i <= n; ++i) { if (!visited[i] && current.step + 1 <= start.step + n) { if (Map[current.data][i]) { visited[i] = true; Node next(i, current.step + 1); q.push(next); } } } } return false;}int main() { ios::sync_with_stdio(false); int n, m; while (true) { cin >> n >> m; if (m == 0) { break; } int a, b; vector
> edges; for (int i = 0; i < m; ++i) { edges.push_back(make_pair(a, b)); } Map[n+1][1] = true; if (BFS(Node(n, 0))) { cout << (current.step + 1) << endl; } else { cout << "NO" << endl; } }}

代码解释

  • 结构体定义:定义了一个Node结构体来存储当前节点的隘口编号和已经过的通道数量。
  • BFS函数:进行广度优先搜索,接受起点,返回是否能到达1号隘口。
  • 输入处理:读取每个测试用例,初始化通道映射关系Map,并调用BFS函数查找最短路径。
  • 输出结果:根据BFS函数的返回值,输出最少通道数量或“NO”。
  • 这个方法确保了在给定的约束条件下,高效地解决问题,并且能够处理大规模输入。

    转载地址:http://soezk.baihongyu.com/

    你可能感兴趣的文章
    php取绝对值
    查看>>
    PHP变量内容的获取
    查看>>
    php各种常用的算法
    查看>>
    php各种缓存策略对比
    查看>>
    RabbitMQ高级特性 - 消息分发(限流、负载均衡)
    查看>>
    php后台“爬虫”模拟登录第三方系统
    查看>>
    php后台的在控制器中就可以实现阅读数增加
    查看>>
    php命令行生成项目结构
    查看>>
    php命名空间
    查看>>
    PHP命名空间带来的干扰
    查看>>
    PHP和MySQL Web开发从新手到高手,第1天-搭建PHP开发环境
    查看>>
    php商店管理系统,基于PHP的商店管理系统.doc
    查看>>
    PHP四大主流框架的优缺点总结
    查看>>
    PHP图片处理—PNG透明缩放并生成灰图
    查看>>
    php在liunx系统中设置777权限不起作用解决方法
    查看>>
    PHP基于openssl实现的非对称加密操作
    查看>>
    php基本符号大全
    查看>>
    php基础篇-二维数组排序 array_multisort
    查看>>
    php基础配置环境变量
    查看>>
    php增删改查封装方法
    查看>>