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

溫馨提示×

溫馨提示×

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

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

C++ math庫與圖論算法的結合

發布時間:2024-11-18 15:49:20 來源:億速云 閱讀:80 作者:小樊 欄目:編程語言

C++的math庫提供了許多基本的數學函數和操作,而圖論算法則用于處理圖結構數據。將這兩者結合起來,可以實現更復雜的功能,例如計算圖的某些屬性、尋找最短路徑或進行網絡分析等。

以下是一些將C++ math庫與圖論算法結合的例子:

  1. 計算圖的歐拉回路或路徑

歐拉回路是指一條通過圖中每條邊恰好一次的回路。歐拉路徑則是指一條通過圖中每條邊恰好一次的路徑,但不要求回路。可以使用C++的math庫來計算圖的歐拉回路或路徑。

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
#include <cmath>

using namespace std;

struct Edge {
    int to, weight;
};

vector<Edge> graph[10];

bool visited[10];

void addEdge(int from, int to, int weight) {
    graph[from].push_back({to, weight});
    graph[to].push_back({from, weight});
}

bool dfs(int node) {
    visited[node] = true;
    for (Edge edge : graph[node]) {
        if (!visited[edge.to]) {
            if (dfs(edge.to)) {
                return true;
            }
        }
    }
    cout << node << " ";
    return false;
}

void eulerPath(int start) {
    fill(visited, visited + 10, false);
    dfs(start);
    cout << endl;
}

int main() {
    addEdge(0, 1, 1);
    addEdge(1, 2, 1);
    addEdge(2, 3, 1);
    addEdge(3, 4, 1);
    addEdge(4, 0, 1);
    eulerPath(0); // Output: 0 1 2 3 4
    return 0;
}
  1. 計算圖的最短路徑

Dijkstra算法是一種用于計算圖中兩點之間最短路徑的算法。可以使用C++的math庫來計算圖的鄰接矩陣或鄰接表,并使用Dijkstra算法計算最短路徑。

#include <iostream>
#include <vector>
#include <queue>
#include <climits>

using namespace std;

struct Edge {
    int to, weight;
};

vector<Edge> graph[10];

void addEdge(int from, int to, int weight) {
    graph[from].push_back({to, weight});
    graph[to].push_back({from, weight});
}

vector<int> dijkstra(int start) {
    vector<int> dist(10, INT_MAX);
    dist[start] = 0;
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    pq.push({0, start});
    while (!pq.empty()) {
        int u = pq.top().second;
        int d = pq.top().first;
        pq.pop();
        if (d > dist[u]) continue;
        for (Edge edge : graph[u]) {
            if (dist[edge.to] > dist[u] + edge.weight) {
                dist[edge.to] = dist[u] + edge.weight;
                pq.push({dist[edge.to], edge.to});
            }
        }
    }
    return dist;
}

int main() {
    addEdge(0, 1, 4);
    addEdge(0, 2, 2);
    addEdge(1, 3, 5);
    addEdge(1, 4, 1);
    addEdge(2, 1, 1);
    addEdge(2, 3, 4);
    addEdge(2, 5, 8);
    addEdge(3, 4, 1);
    addEdge(4, 5, 2);
    vector<int> dist = dijkstra(0);
    for (int i = 0; i < 6; ++i) {
        cout << "Distance from 0 to "<< i << ": " << dist[i] << endl;
    }
    return 0;
}

這些例子展示了如何將C++的math庫與圖論算法結合起來解決實際問題。當然,還有很多其他的問題和應用場景可以通過這種方式來解決。

向AI問一下細節

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

c++
AI

连州市| 武威市| 上蔡县| 安仁县| 靖西县| 大田县| 新巴尔虎右旗| 卢湾区| 大荔县| 临桂县| 泊头市| 志丹县| 新巴尔虎右旗| 左权县| 杭州市| 天峻县| 盖州市| 襄樊市| 和硕县| 霍城县| 阿克苏市| 原平市| 乌兰浩特市| 蓬安县| 韩城市| 巴青县| 洞口县| 平舆县| 来安县| 天台县| 任丘市| 大埔县| 太湖县| 商南县| 德庆县| 孙吴县| 波密县| 通许县| 北京市| 砀山县| 屯昌县|