c++ - 使用BFS解决连接组件问题时得到错误答案

标签 c++ data-structures graph breadth-first-search

您将获得一个具有n个节点和m个边的图形。
计算可以从图形中删除的最大边数,以使其完全包含k个相连的分量。
输入项
第一行包含n,m,k(按顺序)。
接下来的m行有2个数字ui和vi表示那些节点之间有一条边。
确保输入有效(没有多个边沿和没有循环)。
输出量
可以从图中删除的最大边数,以使其完全包含k个连接的分量。
如果图形最初具有多于k个组件,则打印-1。
这是我的解决方案

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{

        int n,m,k;
        cin>>n>>m>>k;
        vector<vector<int>>graph(n+1);
        while(m--)
        {
            int a,b;
            cin>>a>>b;
            graph[a].push_back(b);
            graph[b].push_back(a);
        }

        vector<bool>visited(n+1,false);
        queue<int>q;
        int connected_components=0;
        int span_edges=0;
        for(int i=1;i<=n;i++)
        {
            if(visited[i] == false)
            {
                visited[i]=true;
                q.push(i);
                while(!q.empty())
                {
                    int top=q.front();
                    q.pop();
                    for(auto k : graph[i])
                    {
                       if(!visited[k])
                       {
                           visited[k]=true;
                           span_edges++;
                           q.push(k);
                       }
                    }
                }
            }
            connected_components++;
        }
        if(k<connected_components)
        {
            cout<<-1<<endl;;
        }
        else
        {
            cout<<((m-span_edges)+(k-connected_components))<<endl;
        }
    
}
我得到了肯定的答案,但是我认为逻辑是正确的。我对图形问题不太熟悉,尽管我已经阅读了所有图形概念,但是有人可以帮我吗?
谢谢。

最佳答案

这行for(auto k : graph[i])中有一个错误-您需要遍历存储在top变量而不是i中的顶点的边缘。

关于c++ - 使用BFS解决连接组件问题时得到错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62740103/

相关文章:

delphi - 如何在Delphi中对图实现深度优先搜索(DFS)?

javascript - 如何获取、解决和验证传递/循环依赖

c - 如何求树中节点的最大和

cocoa - 如何使用 Core Data 实现具有可定制节点的图?

C++:初始化在头文件中声明的模板构造函数/例程?

c++ - 使用引用指针中的信息填充 vector

c - 什么是 C 中的内存高效双向链表?

javascript - 在鼠标光标位置添加 cytoscape 节点

c++ - 插入卡在运行时的 unordered_map

c++ - Linux 和 Windows 构建的应用程序之间的 OpenCV 行为差异