图的深度遍历

显示PE

#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
class Graph
{
private:
    char name[100][10];
    int graph[100][100];
    int vertex,arc;
    bool visited[100];
public:
    Graph(int a,int b):vertex(a),arc(b)
    {
        memset(graph,0,sizeof(graph));
        memset(visited,false,sizeof(visited));
        set_graph();
    };
    Graph() {};
    ~Graph() {};
    void set_vertex(int a)
    {
        vertex = a;
    }
    void set_arc(int a)
    {
        arc = a;
    }
    void set_graph()
    {
        for(int i = 0; i < arc; i++)
        {
            int p,q;
            scanf("%d %d",&q,&p);
            graph[p][q] = graph[q][p] = 1;// to show that p->q and q->p;
        }
    }
    void set_name()
    {
        for(int i = 0; i < vertex; i++)
        {
            scanf("%s",name[i]);
        }
    }
    void DFS(int v)
    {
        if(visited[v] == false)
        {
            visited[v] = true;
            printf("%d ",v);
        }
        for(int i = 0; i < vertex; i++)
        {
            if(visited[i]==false && graph[v][i] == 1)
            {
                DFS(i);
            }
        }

    }

};
int main()
{
    ios::sync_with_stdio(false);
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int k,m;// k is the number of the arc, m is the number of vertex;
        scanf("%d %d",&k,&m);
        Graph G(k,m);
        G.DFS(0);
        printf("\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhang-zsq/p/12562728.html

时间: 2024-10-26 14:57:52

图的深度遍历的相关文章

数据结构之 图论---图的深度遍历( 输出dfs的先后遍历节点 )

图的深度遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出.遍历时,先遍历节点编号小的. 输入 输入第一行为整数n(0 < n < 100),表示数据的组数. 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点. 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边. 输

图的深度遍历(dfs)

图的深度遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出.遍历时,先遍历节点编号小的. 输入 输入第一行为整数n(0 < n < 100),表示数据的组数. 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点. 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边. 输

图的深度遍历和广度遍历

概述 图的遍历是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次.图的遍历操作和树的遍历操作功能相似.图的遍历是图的一种基本操作,图的其它算法如求解图的连通性问题,拓扑排序,求关键路径等都是建立在遍历算法的基础之上. 由于图结构本身的复杂性,所以图的遍历操作也较复杂,主要表现在以下四个方面:① 在图结构中,没有一个“自然”的首结点,图中任意一个顶点都可作为第一个被访问的结点.② 在非连通图中,从一个顶点出发,只能够访问它所在的连通分量上的所有顶点,因此,还需考虑如何选取下一个出发点以

数据结构实验之图论二:图的深度遍历-java代码

1 import java.util.Scanner; 2 3 public class Main { 4 5 public static int[] visit = new int[1000]; 6 public static int[][] map = new int[1000][1000]; 7 8 public static void main(String[] args) { 9 Scanner input = new Scanner(System.in); 10 int T = in

图的深度和广度遍历(邻接矩阵)

这里我采用邻接矩阵的存储方式对图进行遍历 #include <iostream> #include <queue> #define INFINITY 100 #define MAXNODE 100 #define OK 1 using namespace std; typedef char VertexType; int vis[MAXNODE]; typedef struct { int adj; } ArcType; typedef struct { VertexType ve

深度遍历与广度遍历

本盘文章是参考其他人的博客写的,只为自己记忆,参考者勿喷. 深度遍历:非递归,使用List保存已经访问过的节点 广度遍历:递归方式,List保存已经访问过的节点,使用Queue队列 具体图如下所示: package com.cust.grape; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Que

图的广度遍历和深度遍历

/* 图的遍历方法主要有两种:一种是深度优先遍历,一种是广度优先遍历.图的深度优先遍历类同于树的先根遍历,图的广度遍历类同树的层次遍历 一:连通图的深度优先遍历算法 图的深度优先遍历算法是遍历时深度优先的算法,即在图的所有邻接顶点中,每次都在访问当前顶点后,首先访问当前顶点的第一个邻接顶点. 连通图的深度优先遍历递归算法如下: 1.访问顶点v并标记顶点v已访问. 2.查找顶点v的第一个邻接顶点w. 3.若顶点v的邻接顶点w存在,则继续执行,否则算法结束. 4.若顶点w尚未被访问,则深度优先遍历递

BST和DST简单的matlab程序(图的广度和深度遍历)

图的广度和深度遍历,具体内容教材有 clc;clear all;close all; %初始化邻接压缩表compressTable=[1 2;1 3;1 4;2 4;2 5;3 6;4 6;4 7];max_vertex = max(compressTable(:)); %压缩表中最大值就是邻接矩阵的宽与高graph_matrix = compressTableToMatrix(compressTable);%从邻接压缩表构造图的矩阵表示[x,y] = cylinder(1,max_vertex

Java实现图的深度和广度优先遍历算法

概述: 近期要学习写网络爬虫.所以把图的深度和广度搜索都再温习一下. 图结构展示: 实现过程: 首先,我们来看看图结构在代码中的实现.有三块逻辑: 1.图中的节点: public class GraphNode { public List<GraphEdge> edgeList = null; private String label = ""; public GraphNode(String label) { this.label = label; if (edgeLis