无向图的邻接矩阵(adjacency matrix)

简介: 无向图的邻接矩阵(adjacency matrix)

MGraph.h

#ifndef __MGRAPH_H__
#define __MGRAPH_H__
const int MaxSize = 10;
template <class T>
class MGraph
{
public:
  MGraph(T _maxtrix[], int _vertex, int _edge);
  ~MGraph();
public:
  void DFSTraverse(int _vertex);
  void BFSTraverse(int _vertex);
private:
  T verMat[MaxSize];
  int edgeMat[MaxSize][MaxSize];
  int verNum, edgeNum;
};
#endif


MGraph.cpp

#include "MGraph.h"
#include <iostream>
using namespace std;
template <class T>
MGraph<T>::MGraph(T _maxtrix[], int _vertex, int _edge)
{
  verNum = _vertex;
  edgeNum = _edge;
  for (int i = 0; i < verNum; i++)
  verMat[i] = _maxtrix[i];
  for (int i = 0; i < verNum; i++)
  for (int j = 0; j < verNum; j++)
    edgeMat[i][j] = 0;
  for (int k = 0; k < edgeNum; k++)
  {
  int i = 0, j = 0;
  cin >> i >> j;
  edgeMat[i][j] = 1;
  edgeMat[j][i] = 1;
  }
}
template <class T>
MGraph<T>::~MGraph()
{}
template <class T>
void MGraph<T>::DFSTraverse(int _vertex)
{
  static int * visited = new int[verNum];
  cout << verMat[_vertex];
  visited[_vertex] = 1;
  for (int i = 0; i < verNum; i++)
  if (edgeMat[_vertex][i] == 1 && visited[i] != 1)
    DFSTraverse(i);
}
template <class T>
void MGraph<T>::BFSTraverse(int _vertex)
{
  int front = -1, rear = -1;
  static int * visited = new int[verNum];
  T *queue = new T[verNum];
  cout << verMat[_vertex];
  visited[_vertex] = 1;
  queue[++rear] = _vertex;
  while (front != rear)
  {
  _vertex = queue[++front];
  for(int i = 0; i<verNum; i++)
    if (edgeMat[_vertex][i] == 1 && visited[i] != 1)
    {
    cout << verMat[i];
    visited[i] = 1;
    queue[++rear] = i;
    }
  }
}


AdjacencyMatrix.cpp

#include <iostream>
#include "MGraph.h"
#include "MGraph.cpp"
using namespace std;
int main()
{
  int verMat[4] = { 0, 1, 2, 3 };
  MGraph<int> G(verMat, 4, 4);
  G.BFSTraverse(0);
  cout << endl;
  G.DFSTraverse(0);
  cout << endl;
  return 0;
}


输入输出

//输入
0 1
0 3
1 3
1 2
即组成无向图:       其邻接矩阵为
0———3               | 0  1  2  3
|  /               ——————————————— 
| /                0| 0  1  0  1
1———2              1| 1  0  1  1
                   2| 0  1  0  0
                   3| 1  1  0  0
//输出
0132
0123


相关文章
|
6月前
|
算法
Tarjan 求有向图的强连通分量
Tarjan算法是一种用于查找有向图中强连通分量的高效方法。作者分享了自己的笔记,强调了网上解释的不清晰性,并引用了OI Wiki的资源。算法维护每个节点的`dfn`(深度优先搜索顺序)和`low`(能到达的最小DFS序)。通过遍历节点和其邻接节点,更新`low`值,识别环路。当`dfn[x] == low[x]`,表示找到一个强连通分量。代码示例展示了具体的实现细节。
|
7月前
|
存储 算法
有向图和无向图的表示方式(邻接矩阵,邻接表)
有向图和无向图的表示方式(邻接矩阵,邻接表)
318 0
|
定位技术
BFS:一维坐标的移动
BFS:一维坐标的移动
|
机器学习/深度学习
有向图,无向图的邻接矩阵和邻接表模板
有向图,无向图的邻接矩阵和邻接表模板
196 0
有向图,无向图的邻接矩阵和邻接表模板
|
Windows
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
125 0
luogu P6175 无向图的最小环问题(floyd求无向图最小环)
邻接矩阵
数据结构中无向图邻接矩阵的存储
邻接矩阵
|
算法
狄克斯特拉(Dijkstra)算法求一个顶点到其余各个顶点的最短路径
狄克斯特拉(Dijkstra)算法求一个顶点到其余各个顶点的最短路径
131 0
|
测试技术
【LeetCode542】01矩阵(BFS)
(1)其实和上一题(【LeetCode286】墙与门(BFS))非常相似,这题的0就相当于286题的门,但是本题是可能存在多个门“堆”在一起(多个0)的情况,首先将0加入队列,从每个0开始一圈圈向1用BFS扩散,可以设置二维数组dis记录距离,和用vis二维数组表示是否遍历过的flag。
116 0
【LeetCode542】01矩阵(BFS)