📜  使用STL进行竞争性编程实现图形实现|设置2(加权图)

📅  最后修改于: 2021-06-26 16:44:42             🧑  作者: Mango

在集合1中,讨论了非加权图。在这篇文章中,讨论了使用STL的加权图表示。该实现用于加权图的邻接表表示。

图-stl

我们使用两个STL容器来表示图:

  • vector:序列容器。在这里,我们使用它来存储所有顶点的邻接列表。我们使用顶点数作为该向量的索引。
  • 对:一个简单的容器,用于存储成对的元素。在这里,我们使用它来存储相邻顶点的数量和连接到相邻边缘的边的权重。

这个想法是使用一对向量的向量。下面的代码实现了相同的功能。

C++
// C++ program to represent undirected and weighted graph
// using STL. The program basically prints adjacency list
// representation of graph
#include 
using namespace std;
 
// To add an edge
void addEdge(vector  > adj[], int u,
                                     int v, int wt)
{
    adj[u].push_back(make_pair(v, wt));
    adj[v].push_back(make_pair(u, wt));
}
 
// Print adjacency list representaion ot graph
void printGraph(vector > adj[], int V)
{
    int v, w;
    for (int u = 0; u < V; u++)
    {
        cout << "Node " << u << " makes an edge with \n";
        for (auto it = adj[u].begin(); it!=adj[u].end(); it++)
        {
            v = it->first;
            w = it->second;
            cout << "\tNode " << v << " with edge weight ="
                 << w << "\n";
        }
        cout << "\n";
    }
}
 
// Driver code
int main()
{
    int V = 5;
    vector > adj[V];
    addEdge(adj, 0, 1, 10);
    addEdge(adj, 0, 4, 20);
    addEdge(adj, 1, 2, 30);
    addEdge(adj, 1, 3, 40);
    addEdge(adj, 1, 4, 50);
    addEdge(adj, 2, 3, 60);
    addEdge(adj, 3, 4, 70);
    printGraph(adj, V);
    return 0;
}


Python3
# Python3 program to represent undirected
# and weighted graph. The program basically
# prints adjacency list representation of graph
 
# To add an edge
def addEdge(adj, u, v, wt):
     
    adj[u].append([v, wt])
    adj[v].append([u, wt])
    return adj
 
# Print adjacency list representaion ot graph
def printGraph(adj, V):
     
    v, w = 0, 0
    for u in range(V):
        print("Node", u, "makes an edge with")
 
        for it in adj[u]:
            v = it[0]
            w = it[1]
            print("\tNode", v, "with edge weight =", w)
             
        print()
 
# Driver code
if __name__ == '__main__':
     
    V = 5
    adj = [[] for i in range(V)]
 
    adj = addEdge(adj, 0, 1, 10)
    adj = addEdge(adj, 0, 4, 20)
    adj = addEdge(adj, 1, 2, 30)
    adj = addEdge(adj, 1, 3, 40)
    adj = addEdge(adj, 1, 4, 50)
    adj = addEdge(adj, 2, 3, 60)
    adj = addEdge(adj, 3, 4, 70)
 
    printGraph(adj, V)
 
# This code is contributed by mohit kumar 29


Javascript


输出:

Node 0 makes an edge with 
    Node 1 with edge weight =10
    Node 4 with edge weight =20

Node 1 makes an edge with 
    Node 0 with edge weight =10
    Node 2 with edge weight =30
    Node 3 with edge weight =40
    Node 4 with edge weight =50

Node 2 makes an edge with 
    Node 1 with edge weight =30
    Node 3 with edge weight =60

Node 3 makes an edge with 
    Node 1 with edge weight =40
    Node 2 with edge weight =60
    Node 4 with edge weight =70

Node 4 makes an edge with 
    Node 0 with edge weight =20
    Node 1 with edge weight =50
    Node 3 with edge weight =70

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。