热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图的DFS遍历输出

#include<string.h>#include<iostream>#include<stdlib.h>usingnamespa
#include
#include
#include


using namespace std;
const int MaxSize=100;


//深度优先
class Tree
{
private:
    int visited[MaxSize];
    int data[MaxSize][MaxSize];
    int spot,vertex;
    int str[MaxSize];
    int num,front,area,d;
public:
    Tree(int n,int m)
    {
        spot=n;
        vertex=m;
        visited[spot]={0};
        num=frOnt=area=d=0;
        for(int i=0;i        {
            for(int j=0;j            {
                data[i][j]=0;
            }
        }
        str[MaxSize]={0};
    }
    ~Tree(){}
    void build()
    {
        int index=-1;
        int i,j;
        while(++index        {
            cin>>i>>j;
            data[i][j]=1;
            data[j][i]=1;
        }
    }
    void print(int v)//用递归的方法
    {
        visited[v]=1;
        cout<        for(int i=0;i        {
            if(data[v][i]==1&&visited[i]!=1)
            {
                print(i);
            }
        }
    }
    void push(int v)
    {
        if(!isfull())
        {
            str[front++]=v;
            d=front;
            num++;
        }else{
            cout<<"isfull"<        }
    }
    void pop()
    {
        if(!isempty())
        {
            cout<            --num;
        }else{
            cout<<"isempty"<        }
    }
    bool isfull()
    {
        return num==MaxSize;
    }
    bool isempty()
    {
        return num==0;
    }
    int gettop()
    {
        return str[--d];
    }
    void DFS(int v)
    {
        visited[v]=1;
        cout<        push(v);
        while(!isempty())
        {
            int flag=0;
            v=gettop();
            for(int i=0;i            {
                if(visited[i]!=1&&data[v][i]==1)
                {
                    visited[i]=1;
                    push(i);
                    cout<                    flag=1;
                    break;
                }
                if(flag)
                {
                    pop();
                }
            }
        }


    }
};


int main()
{
    int spot,vertex;
    cin>>spot>>vertex;
    Tree p(spot,vertex);
    p.build();
   // p.print(0);
    p.DFS(0);
}

推荐阅读
  • 题目解析给定 n 个人和 n 种书籍,每个人都有一个包含自己喜好的书籍列表。目标是计算出满足以下条件的分配方案数量:1. 每个人都必须获得他们喜欢的书籍;2. 每本书只能分配给一个人。通过使用深度优先搜索算法,可以系统地探索所有可能的分配组合,确保每个分配方案都符合上述条件。该方法能够有效地处理这类组合优化问题,找到所有可行的解。 ... [详细]
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 本文深入解析了 Kuangbin 数学训练营中的经典问题——Ekka Dokka,并通过详细的代码示例和数学推导,探讨了该问题的多种解法及其应用场景。通过对算法的优化和扩展,本文旨在为读者提供全面的理解和实用的参考。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
  • 题目要求维护一个数列,并支持两种操作:一是查询操作,语法为QL,用于查询数列末尾L个数中的最大值;二是更新操作,用于修改数列中的某个元素。本文通过ST表(Sparse Table)优化查询效率,确保在O(1)时间内完成查询,同时保持较低的预处理时间复杂度。 ... [详细]
  • 在2019年寒假强化训练中,我们深入探讨了二分算法的理论与实践应用。问题A聚焦于使用递归方法实现二分查找。具体而言,给定一个已按升序排列且无重复元素的数组,用户需从键盘输入一个数值X,通过二分查找法判断该数值是否存在于数组中。输入的第一行为一个正整数,表示数组的长度。这一训练不仅强化了对递归算法的理解,还提升了实际编程能力。 ... [详细]
  • Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题
    Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题 ... [详细]
  • 开发笔记:实现1353表达式中的括号匹配(栈的应用) ... [详细]
  • 在C#中,一旦对象被实例化后,直接重新调用构造函数是不可行的。与C++不同,C#不支持在对象实例化后强制调用构造函数。为了实现类似的功能,可以通过定义一个重置方法或使用工厂模式来重新初始化对象的状态。例如,可以创建一个 `Reset` 方法,在该方法中重新设置对象的属性和状态,从而达到类似于重新调用构造函数的效果。这样不仅保持了代码的清晰性和可维护性,还避免了潜在的副作用。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • Codeforces 605C:Freelancer's Dreams —— 凸包算法解析与题解分析 ... [详细]
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
author-avatar
别拿明天会好做借口
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有