You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现Dijkstra算法报expected unqualified-id before '['错误如何解决

编译错误修复

你遇到的编译错误核心原因是代码中使用了C17版本才引入的结构化绑定语法(auto [d, u]、auto &[v, w]这类写法),编译器默认使用低版本C标准编译时无法识别该语法,有两种修复方式:

  • 方式一:开启C++17编译支持
    编译时添加参数-std=c++17即可,例如GCC编译命令为g++ sol.cpp -o sol -std=c++17
  • 方式二:替换结构化绑定为兼容旧标准的写法
    将auto [d, u] = *pq.begin();替换为:
    ii front = *pq.begin();
    int d = front.first;
    int u = front.second;
    
    将for(auto &[v, w]:AL[u])替换为:
    for(auto &edge : AL[u]) {
        int v = edge.first;
        int w = edge.second;
    
代码逻辑错误修复

就算编译通过,你当前代码也无法正确运行,还存在以下逻辑问题需要修改:

  1. 读边循环次数错误:你当前循环for(int i=0;i<n;i++)读边,应该改为循环m次,因为m是边的数量
  2. 加边逻辑错误:AL[u].emplace_back(u, w)应改为AL[u].emplace_back(v, w),AL[v].emplace_back(v, w)应改为AL[v].emplace_back(u, w),否则邻接表存储的节点编号完全错误
  3. 优先队列初始化错误:初始化循环里pq.insert({dist[u], u})中的u是未初始化的变量,应该改为pq.insert({dist[i], i})
修复后完整代码
#include<bits/stdc++.h>
using namespace std;

#define vi vector<int>
#define vii vector<pair<int, int>>
#define ii pair<int, int>
#define INF 1e6

int main()
{
    int n,m,s,t;
    cin>>n>>m>>s>>t;
    vector<vii> AL(n, vii());
    int u,v,w;

    for(int i=0;i<m;i++)
    {
        cin>>u>>v>>w;
        AL[u].emplace_back(v, w);
        AL[v].emplace_back(u, w);        
    }

    vi dist(n, INF);
    dist[s] = 0;
    set<ii> pq;

    for(int i=0;i<n;i++)
    {
        pq.insert({dist[i], i});
    }

    while(!pq.empty()) {
        ii front = *pq.begin();
        int d = front.first;
        int u = front.second;
        pq.erase(pq.begin());

        for(auto &edge:AL[u]) {
            int v = edge.first;
            int w = edge.second;
            if(dist[u] + w >= dist[v])
                continue;

            pq.erase(pq.find({dist[v], v}));
            dist[v] = dist[u] + w;
            pq.insert({dist[v], v});
        }
    }
    if(dist[t]!=INF)
        cout<<dist[t];
    else
        cout<<"Unreachable";
    return 0;
}

内容的提问来源于stack exchange,提问作者Sambit Khandai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:18:04