邻接矩阵存储带权值的无向图
来源:互联网 发布:2级钢筋弯勾 算法 编辑:程序博客网 时间:2024/06/02 04:31
vertex.h
#pragma onceclass vertex{public: char data;//节点用字符表示 vertex(char c=' '); bool isVisited;//是否被访问过 void visited();};
vertex.cpp
#include"vertex.h"# include<iostream>using namespace std;//构造函数,初始时未被访问,所以为falsevertex::vertex(char c) :data(c), isVisited(false){}void vertex::visited(){ cout << data << " ";}
undiGraph(adjacent marix).h
#pragma once# include"vertex.h"//undigraph:无向图//matrix: 矩阵//adjacency: 邻接# define MAX 65535//带权无向图的邻接矩阵方式存储class myUndiGraph{public: myUndiGraph(int vertex,int edge);//i:顶点个数,j:边数 ~myUndiGraph(); void create();//创建邻接矩阵存储的无向图 void traverMatrix();//遍历邻接矩阵 //double *getVertex(double x);//获取元素 void DFS(int i);//depth first search深度优先搜索 void BFS(int j);//breath first search广度优先搜索 void setVisitedFalse();//记得搜索前将顶点的访问标设为falseprivate: int iVertex;//顶点数 int iEdge;//边数 double **adjacentMatrix;//邻接矩阵 vertex* vertexInfo;//顶点信息};
undiGraph(adjacent marix).cpp
# include"undiGraph(adjacent marix).h"# include<iostream># include"myQuene.h"using namespace std;myUndiGraph::myUndiGraph(int i,int j):iVertex(i),iEdge(j),adjacentMatrix(NULL){ this->adjacentMatrix = new double*[i]; vertexInfo = new vertex[iVertex]; for (int k = 0;k < i;++k) { adjacentMatrix[k] = new double[i]; } for (int i1 = 0;i1 < i;i1++) for (int j1 = 0;j1 < i;j1++) if(i1==j1) adjacentMatrix[i1][j1] = 0;//对角线为0 else adjacentMatrix[i1][j1] = MAX;}myUndiGraph::~myUndiGraph(){ for (int i1 = 0;i1 < iVertex;i1++) delete[]adjacentMatrix[i1]; delete []adjacentMatrix; delete[]vertexInfo;}void myUndiGraph::create(){ cout << "请输入顶点信息:" << endl; for (int i = 0;i < iVertex;i++) cin >> vertexInfo[i].data; cout << "请依次输入无向图中相关联的顶点(0表示第一个顶点)及权值" << endl; int a, b; for (int i = 0;i < iEdge;++i) { cin >> a >> b; cin >> adjacentMatrix[a][b]; adjacentMatrix[b][a] = adjacentMatrix[a][b]; }}void myUndiGraph::traverMatrix(){ for (int i1 = 0;i1 < iVertex;i1++) { for (int j1 = 0;j1 < iVertex;j1++) cout << adjacentMatrix[i1][j1] << "\t"; cout << endl; }}void myUndiGraph::DFS(int i)//depth first search深度优先搜索{ //从第一个节点开始搜索(下标为0) if (!vertexInfo[i].isVisited)//如果第i+1个节点为被访问 { vertexInfo[i].visited(); vertexInfo[i].isVisited = true; } for (int j = i+1;j < iVertex;j++)//在第i+1个顶点的邻接点中遍历 { if (adjacentMatrix[i][j] != MAX) DFS(j); }}void myUndiGraph::BFS(int j)//breath first search广度优先搜索{ if (!vertexInfo[j].isVisited)//如果该节点为访问 { vertexInfo[j].visited(); vertexInfo[j].isVisited = true; } myQuene<int> m(30); m.in(j); int x; while (!m.empty()) { m.out(x); for (int i = x + 1;i < iVertex;++i) { if (adjacentMatrix[x][i] != MAX)//第j+1个节点的所有邻接点 { if (!vertexInfo[i].isVisited) { vertexInfo[i].visited(); vertexInfo[i].isVisited = true; m.in(i); } } } }}void myUndiGraph::setVisitedFalse(){ for (int i = 0;i < iVertex;++i) vertexInfo[i].isVisited = false;}
main.cpp
# include<iostream># include"undiGraph(adjacent marix).h"using namespace std;int main(){ myUndiGraph m(8, 9); m.create(); cout << "\n此图的邻接矩阵为:\n"; m.traverMatrix(); cout << "深度优先搜索结果为:" << endl; m.DFS(0); cout << endl; m.setVisitedFalse();//记得将访问标志设为false cout << "广度优先搜索结果为:" << endl; m.BFS(0); cout << endl; system("pause"); return 0;}
其中myQuene是之前实现的队列
来测试一下,比如这个图
0 0
- 邻接矩阵存储带权值的无向图
- 无向图的邻接矩阵存储
- Java实现无向无权图的邻接矩阵的存储
- 无向网图的邻接矩阵存储结构
- 【数据结构笔记】3:无向图的邻接矩阵存储结构
- 无向图的邻接矩阵
- 邻接矩阵存储无向图及遍历
- 无向图邻接矩阵
- 邻接矩阵无向图
- 邻接矩阵--无向图
- 图的实现 邻接矩阵+无向图
- 无向图的邻接矩阵基本操作
- 邻接矩阵实现无向图的创建
- 无向图的邻接矩阵创建表示
- 邻接矩阵实现的无向图
- 图的定义,存储结构是邻接矩阵(无向图,包含带权图)
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- 有向图的邻接矩阵存储
- 机器学习之SVM简介
- Verilog个人小结
- Java实现简易Tomcat服务器(清晰易懂)
- 推荐一篇格式比较好看着比较舒服的sed命令介绍
- Axis2 客户端调用 设置超时时间
- 邻接矩阵存储带权值的无向图
- opencv鼠标操作:选择提取任意区域
- 关键字
- plsql中执行SELECT current_date FROM dual,为什么获取的时间不正确?获取的不是我本地的时间
- tensorflow:图(Graph)的核心数据结构与通用函数(Utility function)
- <LeetCode>125.Valid Palindrome 验证回文字符串 Tag:string
- 黑马程序员 十二、反射机制
- ORACLE11g数据库字符集从ZHS16GBK转为UTF8
- 关于API