博客
关于我
POJ 2387 Til the Cows Come Home(Dijkstra优先队列)
阅读量:331 次
发布时间:2019-03-04

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

为了解决这个问题,我们需要找到Bessie从最后一个标志N走回第一个标志1的最短路径。这个问题可以通过使用Dijkstra算法来解决,因为道路是权重比较大的,且没有负权边。

方法思路

  • 问题分析:这是一个典型的最短路径问题,适合使用Dijkstra算法来解决。我们需要找到从节点N到节点1的最短路径。
  • 数据结构:使用邻接矩阵来表示道路连接,每个道路的权重即为道路的长度。
  • 算法选择:使用优先队列来实现Dijkstra算法,优先处理距离较小的节点,确保找到最短路径。
  • 优化:每次从优先队列中取出距离最小的节点,更新其邻居的最短距离,并将邻居加入队列。
  • 解决代码

    #include 
    #include
    #include
    #include
    using namespace std;
    struct node {
    int d;
    int pos;
    };
    bool operator<(const node& a, const node& b) {
    return a.d < b.d;
    }
    int main() {
    while (true) {
    int m, n;
    scanf("%d %d", &m, &n);
    if (scanf("%d %d", &m, &n) == EOF) break;
    int INF = 2005;
    int e[2005][2005];
    for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j) {
    e[i][j] = (i == j) ? INF : 0;
    }
    }
    for (int i = 1; i <= m; ++i) {
    int u, v, w;
    scanf("%d %d %d", &u, &v, &w);
    if (e[u][v] > w) {
    e[u][v] = w;
    e[v][u] = w;
    }
    }
    int dis[n + 1];
    int book[n + 1];
    fill(dis.begin(), dis + n + 1, INF);
    fill(book.begin(), book + n + 1, 0);
    dis[n] = 0;
    priority_queue
    q;
    q.push({0, n});
    while (!q.empty()) {
    node t = q.top();
    q.pop();
    if (t.pos == 1) break;
    if (book[t.pos] == 1) continue;
    book[t.pos] = 1;
    for (int j = 1; j <= n; ++j) {
    if (book[j] == 0 && dis[j] > dis[t.pos] + e[t.pos][j]) {
    dis[j] = dis[t.pos] + e[t.pos][j];
    q.push({dis[j], j});
    }
    }
    }
    cout << dis[1] << endl;
    }
    }

    代码解释

  • 输入处理:读取输入数据,包括道路的数量T和标志的数量N,然后读取每条道路的信息,填充邻接矩阵。
  • 初始化:设置邻接矩阵中所有距离为无穷大,除了起点N的距离为0。
  • 优先队列:使用优先队列来处理节点,优先处理距离较小的节点。
  • Dijkstra算法:每次取出距离最小的节点,更新其邻居的最短距离,并将邻居加入队列,直到找到目标节点1。
  • 输出结果:输出从节点N到节点1的最短距离。
  • 转载地址:http://lpnh.baihongyu.com/

    你可能感兴趣的文章
    Node中的Http模块和Url模块的使用
    查看>>
    Node中自启动工具supervisor的使用
    查看>>
    Node入门之创建第一个HelloNode
    查看>>
    node全局对象 文件系统
    查看>>
    Node出错导致运行崩溃的解决方案
    查看>>
    Node响应中文时解决乱码问题
    查看>>
    node基础(二)_模块以及处理乱码问题
    查看>>
    node安装及配置之windows版
    查看>>
    Node实现小爬虫
    查看>>
    Node提示:error code Z_BUF_ERROR,error error -5,error zlib:unexpected end of file
    查看>>
    Node提示:npm does not support Node.js v12.16.3
    查看>>
    Node搭建静态资源服务器时后缀名与响应头映射关系的Json文件
    查看>>
    Node服务在断开SSH后停止运行解决方案(创建守护进程)
    查看>>
    node模块化
    查看>>
    node环境下使用import引入外部文件出错
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>