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

    你可能感兴趣的文章
    Nginx常见问题
    查看>>
    nginx平滑升级解决 nginx 安全漏洞(CVE-2021-23017)和NGINX 环境问题漏洞(CVE-2019-20372)
    查看>>
    Nginx平滑添加模块
    查看>>
    Nginx开启gzip网页传输压缩配置
    查看>>
    nginx开机启动脚本
    查看>>
    nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
    查看>>
    nginx总结及使用Docker创建nginx教程
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
    查看>>
    Nginx搭建RTMP服务器+FFmpeg实现海康威视摄像头预览
    查看>>
    Nginx搭建静态资源映射实现远程访问服务器上的图片资源
    查看>>
    nginx日志不支持中文
    查看>>
    nginx日志分割并定期删除
    查看>>
    Nginx日志分析系统---ElasticStack(ELK)工作笔记001
    查看>>
    Nginx日志按天分割
    查看>>
    Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
    查看>>
    Nginx映射本地静态资源时,浏览器提示跨域问题解决
    查看>>
    Nginx是什么?有哪些核心技术?
    查看>>
    nginx最最最详细教程来了
    查看>>
    Nginx服务器---正向代理
    查看>>