首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

HDU 2112 HDU Today:map 映射站點名 + Dijkstra 鄰接表優化

     編輯:C++ 入門

題目同 HDU 2112

此處採用 map<string, int> 映射站點名,鄰接表存儲圖,優先隊列優化 Dijkstra。

核心代碼結構


#include <map>
#include <queue>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;

struct Edge { int to, w; };
const int MAXV = 155, INF = 1e9;

map mp;
vector G[MAXV];
int dist[MAXV];

int get_id(const string& s) {
    if (!mp.count(s)) mp[s] = mp.size() + 1;
    return mp[s];
}

void dijkstra(int src, int V) {
    fill(dist+1, dist+V+1, INF);
    priority_queue, vector>, greater>> pq;
    dist[src] = 0; pq.push({0, src});
    while (!pq.empty()) {
        auto [d, u] = pq.top(); pq.pop();
        if (d != dist[u]) continue;
        for (auto &e : G[u]) {
            if (dist[e.to] > d + e.w) {
                dist[e.to] = d + e.w;
                pq.push({dist[e.to], e.to});
            }
        }
    }
}

int main() {
    int N;
    while (scanf("%d", &N), N != -1) {
        mp.clear(); for (int i=0; i

優勢對比

特性鄰接矩陣版鄰接表 + 堆版
空間O(V^2)O(E)
時間O(V^2)O(E log V)
適用場景稠密圖、V≤500稀疏圖、大 V

本題 V≤150, E≤10000,兩種均可通過,鄰接表版更具擴展性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved