图(二叉树)邻接矩阵(数组描述)
来源:互联网 发布:画logo的软件 编辑:程序博客网 时间:2024/06/18 09:20
//结点类//.h#ifndef NODE#define NODEclass node{public: node(char data=0); char m_cData; //顶点数据 bool m_bIsVisited; //顶点是否被访问};#endif//.cpp#include"node.h"node::node(char data){ m_cData = data; m_bIsVisited = false;}
//图类//.h#include<vector>#include"node.h"using namespace std; class Cmap{public: Cmap(int capacity); ~Cmap(); bool AddNode(node *pNode);//像图中加入顶点 void resetNode();//重置顶点 bool setValueToMatrixForDirectedGraph(int row, int col, int val = 1);//为有向图设置邻接矩阵 bool setValueToMatrixForUndirectedGraph(int row, int col, int val = 1);//为无向图设置邻接矩阵 void printMatrix();//打印邻接矩阵 void deepthFirstTraverse(int nodeIndex);//深度优先遍历 void breadthFirstTraverse(int nodeIndex);//广度优先遍历private: bool getValueFromMatrix(int row, int col, int &val);//从矩阵中获取权值 void breadthFirstTraverseImpl(vector<int>preVec);//广度优先遍历实现函数 int m_iCapacity;//图中最多可以容纳的顶点数 int m_iNodeCount;//已经添加的顶点个数 node *m_pNodeArray;//用来存放顶点的数组 int *m_pMatrix;//用来存放邻接矩阵};//.cpp#include"Cmap.h"#include<iostream>#include<vector>using namespace std;Cmap::Cmap(int capacity){ m_iCapacity = capacity; m_iNodeCount = 0; m_pNodeArray = new node[m_iCapacity]; m_pMatrix = new int[m_iCapacity*m_iCapacity]; memset(m_pMatrix, 0, m_iCapacity*m_iCapacity*sizeof(int)); //memset(m_pMatrix, 0, m_iCapacity*m_iCapacity*sizeof(int)) //等价于 //for(int i=0;i<m_iCapacity*m_iCapacity;i++) //{ // m_=Matrix[i]=0; //}}Cmap::~Cmap(){ delete[] m_pMatrix; delete[] m_pNodeArray;}bool Cmap::AddNode(node *pNode){ if (pNode == NULL) { return false; } m_pNodeArray[m_iNodeCount].m_cData = pNode->m_cData; m_iNodeCount++; return true;}void Cmap::resetNode(){ for (int i = 0; i < m_iCapacity; i++) { m_pNodeArray[i].m_bIsVisited = false; }}bool Cmap::setValueToMatrixForDirectedGraph(int row, int col, int val){ if (row < 0 || row >= m_iCapacity) { return false; } if (col < 0 || col >= m_iCapacity) { return false; } m_pMatrix[row*m_iCapacity + col] = val; return true;}bool Cmap::setValueToMatrixForUndirectedGraph(int row, int col, int val){ if (row < 0 || row >= m_iCapacity) { return false; } if (col < 0 || col >= m_iCapacity) { return false; } m_pMatrix[row*m_iCapacity + col] = val; m_pMatrix[col*m_iCapacity + row] = val; return true;}bool Cmap::getValueFromMatrix(int row, int col, int &val){ if (row < 0 || row >= m_iCapacity) { return false; } if (col < 0 || col >= m_iCapacity) { return false; } val = m_pMatrix[row*m_iCapacity + col]; return true;}void Cmap::printMatrix(){ for (int i = 0; i < m_iCapacity; i++) { for (int j = 0; j < m_iCapacity; j++) { cout << m_pMatrix[i*m_iCapacity + j] << " "; } cout << endl; }}void Cmap::deepthFirstTraverse(int nodeIndex){ int value = 0; cout << m_pNodeArray[nodeIndex].m_cData << " "; m_pNodeArray[nodeIndex].m_bIsVisited = true; for (int i = 0; i < m_iCapacity; i++) { getValueFromMatrix(nodeIndex, i, value); if (value == 1) { if (m_pNodeArray[i].m_bIsVisited) { continue;//跳出执行下一次循环 } else { deepthFirstTraverse(i);//进行递归 } } else { continue;//跳出执行下一次循环 } } }void Cmap::breadthFirstTraverse(int nodeIndex){ vector<int> curVec; cout << m_pNodeArray[nodeIndex].m_cData << " "; m_pNodeArray[nodeIndex].m_bIsVisited = true; curVec.push_back(nodeIndex); breadthFirstTraverseImpl(curVec);}void Cmap::breadthFirstTraverseImpl(vector<int>preVec){ vector<int>curVec; int value = 0; for (int i = 0; i < (int)preVec.size(); i++) { for (int j = 0; j < m_iCapacity; j++) { getValueFromMatrix(preVec[i], j, value); if (value != 0) { if (m_pNodeArray[j].m_bIsVisited) { continue;//执行下一次循环 } else { cout << m_pNodeArray[j].m_cData << " "; m_pNodeArray[j].m_bIsVisited = true; curVec.push_back(j); } } } } if (curVec.size() == 0) { return; } else { breadthFirstTraverseImpl(curVec); }}
阅读全文
0 0
- 图(二叉树)邻接矩阵(数组描述)
- 二叉树数组描述
- 图--邻接矩阵(数组表示法)
- 图的数组表示(邻接矩阵)
- 图的数组(邻接矩阵)存储实现
- 树转二叉树(邻接矩阵,邻接表)
- java通过数组描述二叉树
- 图的数组(邻接矩阵)存储结构和基本操作
- 数据结构 JAVA描述(六) 图的创建 (邻接矩阵+邻接表)
- 数据结构与算法分析(Java语言描述)(26)—— 邻接矩阵表示稠密图
- 图(邻接矩阵)
- 图、遍历(邻接矩阵)
- 二叉树(数组)
- 队列(数组描述)
- 邻接矩阵遍历(无向图,邻接矩阵,DFS,BFS)
- 图(邻接矩阵->邻接表:邻接表->邻接矩阵)
- 邻接矩阵(无向图)
- 图的数组(邻接矩阵)存储
- 关于ImageLoader must be init with configuration before using问题解决
- 26. Remove Duplicates from Sorted Array
- 关于Servlet的几个小问题
- WIN32学习——资源学习
- delegate协议实现一对多
- 图(二叉树)邻接矩阵(数组描述)
- 树与二叉树
- 解决utunbu无法在线播放音乐的问题
- 按学生成绩进行升序排列
- Highcharts简介
- Eclipse+Pydev插件安装搭建Python开发环境 没有配置好,会报错Project interpreter not specified
- 【unity学习笔记】unity优化DrawCall 及动态批处理的约束
- 异步请求时,JSON.stringify()导致data参数中加号(+)丢失
- Crash加载ramdump报cpu_possible_mask异常问题