91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++算法庫中的最短路徑算法

發布時間:2024-08-13 12:45:32 來源:億速云 閱讀:101 作者:小樊 欄目:編程語言

C++算法庫中最常用的最短路徑算法是Dijkstra算法和Floyd-Warshall算法。

  1. Dijkstra算法:Dijkstra算法是一種單源最短路徑算法,用于計算一個頂點到其他所有頂點的最短路徑。該算法基于貪心策略,通過不斷找到距離源點最近的未訪問頂點來更新最短路徑。

C++標準庫中提供了std::priority_queue和std::vector等數據結構來實現Dijkstra算法。以下是Dijkstra算法的偽代碼:

void Dijkstra(Graph graph, int source) {
    int n = graph.size();
    vector<int> dist(n, INT_MAX);
    dist[source] = 0;
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    pq.push({0, source});
    
    while (!pq.empty()) {
        int u = pq.top().second;
        pq.pop();
        
        for (auto& edge : graph[u]) {
            int v = edge.first;
            int weight = edge.second;
            
            if (dist[u] + weight < dist[v]) {
                dist[v] = dist[u] + weight;
                pq.push({dist[v], v});
            }
        }
    }
}
  1. Floyd-Warshall算法:Floyd-Warshall算法是一種多源最短路徑算法,用于計算所有頂點之間的最短路徑。該算法基于動態規劃的思想,通過逐步更新兩個頂點之間的最短路徑長度來求解。

C++標準庫中提供了std::vector等數據結構來實現Floyd-Warshall算法。以下是Floyd-Warshall算法的偽代碼:

void FloydWarshall(Graph graph) {
    int n = graph.size();
    vector<vector<int>> dist(n, vector<int>(n, INT_MAX));
    
    for (int i = 0; i < n; ++i) {
        dist[i][i] = 0;
        for (auto& edge : graph[i]) {
            int j = edge.first;
            int weight = edge.second;
            dist[i][j] = weight;
        }
    }
    
    for (int k = 0; k < n; ++k) {
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                if (dist[i][k] != INT_MAX && dist[k][j] != INT_MAX && dist[i][k] + dist[k][j] < dist[i][j]) {
                    dist[i][j] = dist[i][k] + dist[k][j];
                }
            }
        }
    }
}

這兩種算法都能有效地求解最短路徑問題,具體選擇哪一種算法取決于具體的應用場景和需求。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

黄大仙区| 洛宁县| 白城市| 清丰县| 唐河县| 云浮市| 大理市| 建湖县| 密山市| 达日县| 石城县| 乌拉特中旗| 水富县| 辽阳县| 平利县| 手机| 许昌市| 彭州市| 寻甸| 涡阳县| 阜宁县| 黄梅县| 定南县| 广德县| 黑龙江省| 寿阳县| 精河县| 海晏县| 鲜城| 白玉县| 孝昌县| 林口县| 江口县| 文登市| 高清| 韶山市| 土默特右旗| 东港市| 林州市| 贵溪市| 大名县|