【问题标题】:function printGraph prints too many Nodes函数 printGraph 打印了太多的节点
【发布时间】: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&lt;vector&lt;pair&lt;int, int&gt;&gt;&gt; graph(9, vector&lt;pair&lt;int, int&gt;&gt;(9)); 中做了什么?
  • 只需从“(9)”中删除 9,它的工作就会如您所愿,即节点 1 和节点 8 将被显示

标签: c++ graph-theory


【解决方案1】:

您的问题很可能是由于

 int main()
 {
    vector<vector<pair<int, int>>> graph(9, vector<pair<int, int>>(9));
    #...
 }

您默认将两个向量的大小初始化为 9,然后仅添加两条边而不是 9。此行为导致 std::pair 的默认构造函数,已知该构造函数用零填充两个字段。

here

你能告诉我们输出吗?

【讨论】:

  • 不要在你的答案中问问题。如果原始问题需要澄清,请对该问题发表评论。然后,在完全客观地回答问题时回答问题。此外,“这个答案”(或另一个答案的标题)是比“这里”更好的链接文本。
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2015-05-24
  • 2013-02-27
  • 2017-09-15
  • 1970-01-01
相关资源
最近更新 更多