Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ biểu diễn đồ thị bằng danh sách kề


Biểu diễn danh sách kề của một đồ thị là biểu diễn bằng danh sách liên kết. Trong biểu diễn này, chúng ta có một mảng các danh sách. Kích thước mảng là V. Ở đây V là số đỉnh. Nói cách khác, chúng ta có thể nói rằng chúng ta có một mảng để lưu trữ V số danh sách khác nhau. Nếu một tiêu đề danh sách là đỉnh u, thì nó biểu thị rằng nó sẽ chứa tất cả các đỉnh kề của u.

Độ phức tạp của biểu diễn Danh sách kề

  • Biểu diễn này chiếm O(V+2E) cho đồ thị vô hướng, và O(V+E) cho đồ thị có hướng. Nếu số cạnh tăng lên, bộ nhớ yêu cầu cũng sẽ tăng.

Đầu vào:

Chương trình C++ biểu diễn đồ thị bằng danh sách kề

Đầu ra:

Chương trình C++ biểu diễn đồ thị bằng danh sách kề

Thuật toán

add_edge(adj_list, u, v)

Đầu vào - Các đỉnh u và v của một cạnh {u,v}, và danh sách kề

Đầu ra - Danh sách kề của đồ thị G

Bắt đầu
    Thêm v vào danh sách tại chỉ số u
    Thêm u vào danh sách tại chỉ số v
Kết thúc

Mã ví dụ

#include<iostream> 
#include<list> 
#include<iterator> 
using namespace std; 

void displayAdjList(list<int> adj_list[], int v) { 
    for(int i = 0; i < v; i++) { 
        cout << i << "--->"; 
        list<int> :: iterator it; 
        for(it = adj_list[i].begin(); it != adj_list[i].end(); ++it) { 
            cout << *it << " "; 
        } 
        cout << endl; 
    } 
} 

void add_edge(list<int> adj_list[], int u, int v) { 
    //thêm v vào danh sách u, và u vào danh sách v 
    adj_list[u].push_back(v); 
    adj_list[v].push_back(u); 
} 

main(int argc, char* argv[]) { 
    int v = 6; //có 6 đỉnh trong đồ thị 
    //tạo một mảng các danh sách có kích thước 6 
    list<int> adj_list[v]; 
    add_edge(adj_list, 0, 4); 
    add_edge(adj_list, 0, 3); 
    add_edge(adj_list, 1, 2); 
    add_edge(adj_list, 1, 4); 
    add_edge(adj_list, 1, 5); 
    add_edge(adj_list, 2, 3); 
    add_edge(adj_list, 2, 5); 
    add_edge(adj_list, 5, 3); 
    add_edge(adj_list, 5, 4); 
    displayAdjList(adj_list, v); 
}

Kết quả

0--->4 3 1--->2 4 5 2--->1 3 5 3--->0 2 5 4--->0 1 5 5--->1 2 3 4