图2 - DFS、BFS遍历邻接矩阵图

news/2024/7/20 23:02:26 标签: 深度优先, 宽度优先, 算法

邻接矩阵存储无向图的类

const int MaxSize=10; 
template <class T>
class Mgraph{
   public:
      MGraph(T a[ ], int n, int e );   
       ~MGraph( )
       void DFSTraverse(int v); 
       void BFSTraverse(int v);
        ……
   private:
       T vertex[MaxSize]; 
       int arc[MaxSize][MaxSize]; 
       int vertexNum, arcNum; 
};

邻接矩阵中图的基本操作——构造函数

  MGraph(T a[ ], int n, int e );   

1.确定图的顶点个数和边的个数;
2.输入顶点信息存储在一维数组vertex中;
3.初始化邻接矩阵;
4.依次输入每条边存储在邻接矩阵arc中;
4.1 输入边依附的两个顶点的序号i, j;
4.2 将邻接矩阵的第i行第j列的元素值置为1;
4.3 将邻接矩阵的第j行第i列的元素值置为1;

template <class T>
MGraph::MGraph(T a[ ], int n, int e) {
    vertexNum=n; 
    arcNum=e;
    for (i=0; i<vertexNum; i++) 
        vertex[i]=a[i];
    for (i=0; i<vertexNum; i++)    //初始化邻接矩阵
	   for (j=0; j<vertexNum; j++)
           arc[i][j]=0;             
    for (k=0; k<arcNum; k++) {
        cin>>i>>j;     //边依附的两个顶点的序号
        arc[i][j]=1;
        arc[j][i]=1;  //置有边标志    
    }
}

深度优先遍历

⑴ 访问顶点v;
⑵ 从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;
⑶ 重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。

int visited[MaxSize];
template <class T>
void MGraph::DFSTraverse(int v){
     cout<<vertex[v]; 
     visited [v]=1; //  已经输出了
     for (j=0; j<vertexNum; j++)
         if (arc[v][j]==1 && visited[j]==0)
            DFSTraverse( j );
}

广度优先遍历

⑴ 访问顶点v;
⑵ 依次访问v的各个未被访问的邻接点v1, v2, …, vk;
⑶ 分别从v1,v2,…,vk出发依次访问它们未被访问的邻接点,并使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问。
----直至图中所有与顶点v有路径相通的顶点都被访问到。

int visited[MaxSize];
template <class T>
void MGraph::BFSTraverse(int v){     
    front=rear=-1;
    cout<<vertex[v]; 
    visited[v]=1; 
     Q[++rear]=v; 
    while (front!=rear)
     {
         v=Q[++front];   
         for (j=0; j<vertexNum; j++)
            if (arc[v][j]==1 && visited[j]==0 ) {
                  cout<<vertex[j];visited[j]=1;
                  Q[++rear]=j;
            }
      }
}

http://www.niftyadmin.cn/n/1260771.html

相关文章

XML序列化的注意事项

1、定义一个有相应字段的类&#xff0c;类名称必须和XML中的根节点同名 2、调用序列化的方法 例如xml为&#xff1a; <?xml version"1.0" encoding"UTF-8"?><sso> <unitcode>002639123</unitcode> <devcoding>hyj.pt.zs…

进程间的通信方式

进程间的通信方式&#xff1a; 1.管道&#xff08;pipe&#xff09;及有名管道&#xff08;named pipe&#xff09;&#xff1a; 管道可用于具有亲缘关系进程间的通信&#xff0c;有名管道除了具有管道所具有的功能外&#xff0c;它还允许无亲缘关系进程间的通信。 2.信号&…

C#之async与await

C# 支持含两个关键字的异步程序&#xff1a;async 和 await。 将 async 修饰符添加到方法声明中&#xff0c;以声明这是异步方法。 await 运算符通知编译器异步等待结果完成。 控件返回给调用方&#xff0c;该方法返回一个管理异步工作状态的结构。 结构通常是 System.Threadin…

图3 - 图的基本表示结构 期末考试复习

存储结构里面主要由四部分构成: 一个一维数组存储的是顶点信息&#xff0c; 是邻接矩阵由二维数组组成&#xff0c;存储着各顶点彼此之间的关系&#xff0c; 当前图的顶点数和线数。 下面是具体的代码实现 #include <iostream> using namespace std;int MAXVERTEX 100…

宇然软件打印插件安装教程--宇然电脑公司管理软件

宇然软件打印插件安装教程 宇然软件使用目前最先进最流行的B/S架构开发,软件仅需要安装在一台服务器电脑上,所有用户无论在哪里,只要能上网的地方,通过IE浏览器就可以打开使用软件 在打印上, 宇然软件自主研发了功能强大,可直接在线打印,在线设计报表的IE打印插件,只要安装了插…

图4——最小生成树

**生成树的代价&#xff1a;**设G&#xff08;V&#xff0c;E&#xff09;是一个无向连通网&#xff0c;生成树上各边的权值之和称为该生成树的代价。 **最小生成树&#xff1a;**在图G所有生成树中&#xff0c;代价最小的生成树称为最小生成树。 初始化两个辅助数组lowcost&a…

字体函数 -- GetDeviceCaps

函数功能&#xff1a;该函数检索指定设备的设备指定信息。  函数原型&#xff1a;int GetDeviceCaps(HDC hdc, int nlndex)&#xff1b;  参数&#xff1a;  1、hdc&#xff1a;设备上下文环境的句柄。  2、nIndex&#xff1a;指定返回项&#xff0c;该参数取下列一值。…

图5——AOV网和AOE网

AOV网&#xff1a; 在一个表示工程的有向图中&#xff0c;用顶点表示活动&#xff0c;用弧表示活动之间的优先关系&#xff0c;称这样的有向图为顶点表示活动的网&#xff0c;简称AOV网。 特点&#xff1a; 1.AOV网中的弧表示活动之间存在的某种制约关系。 2.AOV网中不能出现回…