使用 STL 在 C++ 中实现图和 BFS

2024-02-05

以下是我编写的代码。

#include <iostream>
#include <vector>
#include <list>
#include <queue>

using namespace std;

const int V=5;
vector<list<int> > a(V);

int BFS(int s)
{
    int visited[V]={0};
    queue<int> Q;
    visited[s]=1;
    Q.push(s);
    while(!Q.empty())
    {
        int x=Q.front();
        vector<list<int> >::iterator it1=a.begin()+x;
        list<int> it2=*it1;
        list<int>::iterator iter=it2.begin();
        while(iter!=it2.end())
        {
            if(visited[*iter]==0)
            {
                visited[*iter]=1;
                Q.push(*iter);
            }
            visited[x]=2;
            Q.pop();
            iter++;
        }
    }
    return 0;
}

void addEdge(int i, int j)
{
    a[i].push_back(j);
    a[j].push_back(i);
}

int main() {
    vector<list<int> >::iterator it1=a.begin();
    addEdge(0,1);
    addEdge(0,2);
    addEdge(2,1);
    while(it1!=a.end())
    {
        list<int> it2=*it1;
        list<int>::iterator iter=it2.begin();
        while(iter!=it2.end())
        {
            cout<<*iter<<" ";
            iter++;
        }
        cout<<endl;
        it1++;
    }
    cout<<BFS(0);
    return 0;
}

执行 BFS(0) 时,编译器给出运行时错误。由于我对迭代器没有太多经验,我认为错误来自于 BFS 函数中的迭代器语句。请帮助我解决代码中的问题。

谢谢你!


你的流行逻辑是错误的。它应该看起来像这样:

int BFS(int s)
{
    int visited[V]={0};
    queue<int> Q;
    visited[s]=1;
    Q.push(s);
    while(!Q.empty())
    {
        int x=Q.front();
        Q.pop(); // pop here. we have x now

        vector<list<int> >::iterator it1=a.begin()+x;
        list<int> it2=*it1;
        list<int>::iterator iter=it2.begin();
        while(iter!=it2.end())
        {
            if(visited[*iter]==0)
            {
                visited[*iter]=1;
                Q.push(*iter);
            }
            ++iter;
        }

        visited[x]=2; // set visited here.
    }
    return 0;
}

我留给您计算最终值,因为我想您希望始终返回除零之外的东西。然而,这正是你问题的症结所在。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 STL 在 C++ 中实现图和 BFS 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 匹配后替换行

    给定这个文件 cat foo txt AAA 111 BBB 222 CCC 333 我想替换之后的第一行BBB with 999 我想出了这个命令 awk BBB f 1 print next f 1 999 f 0 1 foo txt
  • Stacktrace Java Eclipse 中的未知来源

    我有一个非常烦人的问题 当在 Eclipse 中从源代码中导出 jar 文件时 我不会在堆栈跟踪中获得有关发生错误的源代码和行号的信息 我已经检查了 ecplise 中项目的编译器设置 并且设置了类文件生成部分中的所有选项 我正在为 Min
  • 如何使用 VB 6.0 生成格式良好的 XML 文件?

    我正在开发 Visual Basic 6 0 项目 需要生成一个格式良好的 XML 文件 其如下所示
  • RESTEasy - 使用重复的缓存控制进行响应 - Wildfly10

    我有一个带有图像的 GET 响应 GET Path id thumbnail public Response readThumbnailById PathParam id String id QueryParam serviceContex
  • 如何删除没有标签的Docker镜像?

    我使用 docker 已有 5 个月了 从来没有遇到过这个问题 我有 2 个具有相同 ID 的图像 因此我想删除我知道它已被弃用的图像 问题是它没有 ID 当我尝试这样做时 dk rmi f gitlab lab 5005 xs mgmt
  • Scala:如何使用默认值初始化对象

    我认为用一个例子可以更好地解释这一点 我有以下案例类 case class Person name String no name surname String no surname 我想创建一个通用函数来填充它 例如 一条 json 消息
  • 具有配置的类库中的 Entity Framework 7 迁移脚手架

    尝试将迁移添加到 ASP NET 5 类库中的 EF7 模型 跑步时dnx ef migration add mymigration失败并产生不同的结果 具体取决于我运行它的项目 如果我在主项目的文件夹中运行它 它无法找到DbContext
  • 返回多个值并访问它们?

    我将如何构造它以返回多个值 消息和名称 并能够在js html file code gs function createArtistTable name var message test return message and name js
  • 如何使用 Fetch API 发布身体数据?

    下面是在邮递员中导入并运行后成功返回响应的curl命令 curl request POST data grant type password data username test data password xyz1234 data sco
  • SQL命令添加数据库图表

    sql server 2008 上是否有一个 sql 命令可以运行以启用数据库图表而不是出现此对话框 该数据库没有使用数据库图表所需的一个或多个支持对象 你想创造它们吗 该脚本有点太长 无法在此处添加 但您可以执行以下操作 1 创建一个新的
  • 如何从 bode() 到达第一个和第二个图

    我知道如何使用 bode 函数创建波特图 如果我想重叠两个或多个系统频率响应 我使用 bode sys1 sys2 or hold on 例如 当我想要到达该图以便用 text 放置图例时 很容易到达第二个图 像图形指针这样的东西总是返回到
  • 错误:“不推荐使用 Window 类型中的 show() 方法”

    这是一个简单的程序 只需打开 AWT 我正在使用 eclipse 并且我收到上面显示的frame show 的错误 Eclipse 正在用一条线跨越 显示 我想要这个程序做的只是显示一个 300px x 300px 的框架窗口 完整代码如下
  • Apache 无法在 OSX 中的 MAMP 中启动(但 MySQL 可以工作)

    我已经使用 MAMP 工作了几个月 最近安装了 PostgreSQL 它还建议安装 Apache 我这样做是为了确保 PostgreSQL 正常工作 然后我卸载了 PostgreSQL 和 apache 构建并尝试重新启动 MAMP 它启动
  • 如何为 Android 制作局域网唤醒?

    你能告诉我 如何为Android制作Wake On Lan应用程序吗 我在谷歌上搜索了两周 尝试了一切 从另一个唤醒局域网应用程序下载了源代码 并尝试找到用于制作和发送魔术包的代码 看起来其他所有代码都可以工作 但是当我在我的应用程序中使用
  • 初级 Java:变量作用域问题

    我正在练习我的java书中的一些工作 并且在获取使用变量进行计算的方法时遇到问题 请注意 这是一项正在进行的工作 我目前只是试图让它使用 CircleArea 方法来计算圆的面积 这是必要的代码 public class Geometry
  • Laravel“目标 [Illuminate\Contracts\Bus\Dispatcher] 不可实例化。”

    正如标题本身所说 我遇到了以下问题 Target Illuminate Contracts Bus Dispatcher is not instantiable 我正在尝试使用自定义脚本并包含默认的 Laravel 类 require on
  • POST 请求 Fetch API 防止重定向

    所以我想制作一个纯html和javascript表单并将其提交到服务器 这是我的 html 表单代码
  • wxPython:当我关闭框架时,单选按钮如何记住我的选择

    您好 我有一个主框架和一个按钮 按下该按钮时会打开第二个框架 第二个框架有 6 个单选按钮 我的问题是 当我选择与已选择的单选按钮不同的单选按钮并关闭框架时 当我再次打开它 不关闭整个程序 时 为什么选择第一个单选按钮以及如何保留我的新选择
  • 不要将文字作为本地化参数传递

    在我的项目 Windows Phone 8 1 应用程序 上运行代码分析时 出现以下警告 CA1303 不要将文字作为本地化参数传递 方法 Common TranslateError String 将文字字符串作为调用 XDocument
  • 使用 STL 在 C++ 中实现图和 BFS

    以下是我编写的代码 include