ACM模板--邻接矩阵 有向图
/*** C++: 邻接矩阵图** @author judyge* @date 2014/04/19*/#include <iomanip>
#include <iostream>
#include <vector>
using namespace std;#define MAX 100
class MatrixDG {private:char mVexs[MAX]; // 顶点集合int mVexNum; // 顶点数int mEdgNum; // 边数int mMatrix[MAX][MAX]; // 邻接矩阵public:// 创建图(自己输入数据)MatrixDG();// 创建图(用已提供的矩阵)MatrixDG(char vexs[], int vlen, char edges[][2], int elen);~MatrixDG();// 打印矩阵队列图void print();private:// 读取一个输入字符char readChar();// 返回ch在mMatrix矩阵中的位置int getPosition(char ch);
};/* * 创建图(自己输入数据)*/
MatrixDG::MatrixDG()
{char c1, c2;int i, p1, p2;// 输入"顶点数"和"边数"cout << "input vertex number: ";cin >> mVexNum;cout << "input edge number: ";cin >> mEdgNum;if ( mVexNum < 1 || mEdgNum < 1 || (mEdgNum > (mVexNum * (mVexNum-1)))){cout << "input error: invalid parameters!" << endl;return ;}// 初始化"顶点"for (i = 0; i < mVexNum; i++){cout << "vertex(" << i << "): ";mVexs[i] = readChar();}// 初始化"边"for (i = 0; i < mEdgNum; i++){// 读取边的起始顶点和结束顶点cout << "edge(" << i << "): ";c1 = readChar();c2 = readChar();p1 = getPosition(c1);p2 = getPosition(c2);if (p1==-1 || p2==-1){cout << "input error: invalid edge!" << endl;return ;}mMatrix[p1][p2] = 1;}
}/** 创建图(用已提供的矩阵)** 参数说明:* vexs -- 顶点数组* vlen -- 顶点数组的长度* edges -- 边数组* elen -- 边数组的长度*/
MatrixDG::MatrixDG(char vexs[], int vlen, char edges[][2], int elen)
{int i, p1, p2;// 初始化"顶点数"和"边数"mVexNum = vlen;mEdgNum = elen;// 初始化"顶点"for (i = 0; i < mVexNum; i++)mVexs[i] = vexs[i];// 初始化"边"for (i = 0; i < mEdgNum; i++){// 读取边的起始顶点和结束顶点p1 = getPosition(edges[i][0]);p2 = getPosition(edges[i][1]);mMatrix[p1][p2] = 1;}
}/* * 析构函数*/
MatrixDG::~MatrixDG()
{
}/** 返回ch在mMatrix矩阵中的位置*/
int MatrixDG::getPosition(char ch)
{int i;for(i=0; i<mVexNum; i++)if(mVexs[i]==ch)return i;return -1;
}/** 读取一个输入字符*/
char MatrixDG::readChar()
{char ch;do {cin >> ch;} while(!((ch>='a'&&ch<='z') || (ch>='A'&&ch<='Z')));return ch;
}/** 打印矩阵队列图*/
void MatrixDG::print()
{int i,j;cout << "Martix Graph:" << endl;for (i = 0; i < mVexNum; i++){for (j = 0; j < mVexNum; j++)cout << mMatrix[i][j] << " ";cout << endl;}
}int main()
{char vexs[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};char edges[][2] = {{'A', 'B'}, {'B', 'C'}, {'B', 'E'}, {'B', 'F'}, {'C', 'E'}, {'D', 'C'}, {'E', 'B'}, {'E', 'D'}, {'F', 'G'}}; int vlen = sizeof(vexs)/sizeof(vexs[0]);int elen = sizeof(edges)/sizeof(edges[0]);MatrixDG* pG;// 自定义"图"(输入矩阵队列)//pG = new MatrixDG();// 采用已有的"图"pG = new MatrixDG(vexs, vlen, edges, elen);pG->print(); // 打印图return 0;
}
ACM模板--邻接矩阵 有向图相关推荐
- ACM模板--邻接矩阵 有向图 搜索算法
/*** C++: 邻接矩阵图** @author judyge* @date 2014/04/19*/#include <iomanip> #include <iostream&g ...
- ACM模板--邻接矩阵 无向图 Prim Kruskal Dijkstra
/*** C++: Dijkstra算法获取最短路径(邻接矩阵)** @author skywang* @date 2014/04/24*/#include <iomanip> #incl ...
- ACM模板--邻接矩阵 无向图 搜索算法
/*** C++: 邻接矩阵表示的"无向图(Matrix Undirected Graph)"** @author judyge* @date 2014/04/19*/#inclu ...
- ACM模板--邻接矩阵 无向图
/*** C++: 邻接矩阵表示的"无向图(List Undirected Graph)"** @author skywang* @date 2014/04/19*/#includ ...
- ACM模板--链接表 有向图
/*** C++: 邻接表图** @author judyge* @date 2014/04/19*/#include <iomanip> #include <iostream> ...
- 我的所有优质博客全部开源啦(我自己原创的《ACM模板》《算法全家桶》《算法竞赛中的初等数论》 PDF免费下载)
你好呀ヾ(≧▽≦*)o 我是繁凡さん 这两年来我写了很多长篇文章,主要涉及数据结构,算法,程序设计竞赛,数学,计算几何等方面的内容: <数据结构>C语言版(清华严蔚敏考研版) 全书知识梳理 ...
- 线性求逆元模板_ZXBlog/ACM模板(C++).md at bb6f2522054d5370df79222461293721e8edede2 · cw1027/ZXBlog · GitHub...
ACM模板(C++) 1.大数 加法,乘法模板 //题目链接 : http://poj.org/problem?id=2506 //题目大意 : 就是问你用2*1,1*2,2*2的砖拼成2*n的长方形 ...
- ACM模板(满注释模板!)
转自:https://fanfansann.blog.csdn.net/article/details/105493218 目录 F o r e w o r d ForewordForeword T ...
- 邻接矩阵有向图的介绍
邻接矩阵有向图的介绍 邻接矩阵有向图是指通过邻接矩阵表示的有向图. 上面的图G2包含了"A,B,C,D,E,F,G"共7个顶点,而且包含了"<A,B>,< ...
最新文章
- 如何在不使用任何图像或跨度标签的情况下通过CSS在UL / LI html列表中设置子弹颜色[复制]
- 如何提高Linux下块设备IO的整体性能?
- jQuery中排除指定元素,同时选择剩下的所有元素
- Linux shell 对于文件的删除,复制,修改文件名等操作
- apache ftp server的外网访问问题
- android 滑动冲突
- 信息学奥赛一本通 1091:求阶乘的和 / 2026:【例4.12】阶乘和 / OpenJudge NOI 1.5 34
- 数据预处理-数据规约-属性规约
- Scala类型系统的目的——Martin Odersky访谈(三)
- oracle 10g RAC app VIP ,ONS,GSD,ASM,OCR,VOTE名称及代表的涵义。
- Logstash 初探
- easyUI_rowdata
- 2019《中国智慧城市建设产业全景图谱》
- native8081端口 react_教你轻松修改React Native端口(如何同时运行多个React Native、8081端口占用问题)...
- TortoiseSVN右键没有菜单
- 进阶-第28__深度探秘搜索技术_实战掌握误拼写时的fuzzy模糊搜索技术
- Python实现对某微博用户数据分析
- 远程 PC 访问软件
- 逆光人物摄影构图灵感经验分享,在集设网参与设计大咖的成长之路!
- jmeter-连接数据库
热门文章
- 【IOC 控制反转】Android 布局依赖注入 ( 布局依赖注入步骤 | 布局依赖注入代码示例 )
- 【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )
- 【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
- 【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )
- 【嵌入式开发】时钟初始化 ( 时钟相关概念 | 嵌入式时钟体系 | Lock Time | 分频参数设置 | CPU 异步模式设置 | APLL MPLL 时钟频率设置 )
- .dll与.lib的关系总结
- PIE_SDK.NET功能表
- BZOJ 3884 上帝与集合的正确用法 (欧拉定理)
- 【ASP.NET MVC 学习笔记】- 16 Model Binding(模型绑定)
- JavaScript的数据访问总结