博客
关于我
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/

    你可能感兴趣的文章
    Oracle零碎要点---多表联合查询,收集数据库基本资料
    查看>>
    Oracle静默安装
    查看>>
    Oracle面试题:Oracle中truncate和delete的区别
    查看>>
    ThreadLocal线程内部存储类
    查看>>
    thinkphp 常用SQL执行语句总结
    查看>>
    Oracle:ORA-00911: 无效字符
    查看>>
    Text-to-Image with Diffusion models的巅峰之作:深入解读 DALL·E 2
    查看>>
    TCP基本入门-简单认识一下什么是TCP
    查看>>
    tableviewcell 中使用autolayout自适应高度
    查看>>
    Orcale表被锁
    查看>>
    org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned
    查看>>
    org.apache.poi.hssf.util.Region
    查看>>
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for /
    查看>>
    org.hibernate.HibernateException: Unable to get the default Bean Validation factory
    查看>>
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    查看>>
    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
    查看>>
    org.tinygroup.serviceprocessor-服务处理器
    查看>>
    org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
    查看>>