【发布时间】:2022-12-12 07:03:10
【问题描述】:
我正在尝试制作一个程序来打印图中的节点和边,并显示从声明的节点到所有其他节点的最短路径。问题是我创建的打印函数打印了太多名称为 0 的节点和权重为 0 的边,我不知道为什么。这是在节点中添加边的函数和应该正确打印图形的函数。
`
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
void addEdge(vector<vector<pair<int, int>>>& graph, int u, int v, int w)
{
graph[u].push_back(make_pair(v, w));
graph[v].push_back(make_pair(u, w));
}
void printGraph(vector<vector<pair<int, int>>> 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";
}
}
int main()
{
vector<vector<pair<int, int>>> graph(9, vector<pair<int, int>>(9));
addEdge(graph, 0, 1, 4);
addEdge(graph, 0, 7, 8);
printGraph(graph,1);
return 0;
}
`
我试图找到类似的问题但没有成功。
【问题讨论】:
-
您认为您的硬编码
9s 在vector<vector<pair<int, int>>> graph(9, vector<pair<int, int>>(9));中做了什么? -
只需从“(9)”中删除 9,它的工作就会如您所愿,即节点 1 和节点 8 将被显示
标签: c++ graph-theory