C++图结构的图结构操作示例
示例代码:
/*
By qianshou
2013/10/5明天就要开学了~哎~
*/
#include<iostream>
using namespace std;
/*******************准备数据*****************************/
#define MaxNum 20 //图的最大顶点数
#define MaxValue 65535 //最大值
struct GraphMatrix
{
char Vertex[MaxNum]; //保存顶点信息(序号或字母)
int GType; //图的类型(0:无向图,1:有向图)
int VertexNum; //顶点的数量
int EdgeNum; //边的数量
int EdgeWeight[MaxNum][MaxNum]; //保存边的权值
int IsTrav[MaxNum]; //遍历标志(用来标示是否被访问过)
};
/******************创建图********************************/
void CreateGraph(GraphMatrix *GM)
{
void ClearGraph(GraphMatrix *GM);
int i,j,k;
int weight; //权值
char EstartV,EendV; //边的起点和终点
cout<<"请输入图的类型:0.表示无向图;1表示有向图:";
cin>>GM->GType;
cout<<"请输入顶点的数量:";
cin>>GM->VertexNum;
cout<<"请输入图中的顶点信息:"<<endl;
for(i=0;i<GM->VertexNum;i++) //输入结点
{
cout<<"第"<<(i+1)<<"个顶点:";
cin>>GM->Vertex[i]; //保存到顶点数组中
}
ClearGraph(GM);
cout<<"请输入边的个数:"<<endl;
cin>>GM->EdgeNum;
cout<<"输入每条边对应的起点,终点,以及权值:"<<endl;
for(k=0;k<GM->EdgeNum;k++)
{
cout<<"第"<<k+1<<"条边:";
cin>>EstartV>>EendV>>weight;
for(i=0;GM->Vertex[i]!=EstartV;i++); //在已有结点中查找起点
for(j=0;GM->Vertex[j]!=EendV;j++); //在已有结点中查找终点
GM->EdgeWeight[i][j]= weight; //在二维数组中保存对应的权值
if(GM->GType==0) //如果该图为无向图
{
GM->EdgeWeight[j][i]=weight; //在对角位置保存权值
}
}
}
/**********************清空图*************************************************/
void ClearGraph(GraphMatrix *GM)
{
int i,j;
for(i=0;i<GM->VertexNum;i++)
{
for(j=0;j<GM->VertexNum;j++)
{
GM->EdgeWeight[i][j]=MaxValue; //使矩阵中的元素都为MaxValue
}
}
}
/**********************显示图(输出对应的邻接矩阵)*****************************/
void OutGraph(GraphMatrix *GM)
{
int i,j;
for(j=0;j<GM->VertexNum;j++)
{
cout<<"\t"<<GM->Vertex[j]; //在第一行输出结点信息
}
cout<<endl;
for(i=0;i<GM->VertexNum;i++)
{
cout<<GM->Vertex[i];
for(j=0;j<GM->VertexNum;j++)
{
if(GM->EdgeWeight[i][j]==MaxValue)
{
cout<<"\t"<<'Z'; //输出Z表示无穷大
}
else
{
cout<<"\t"<<GM->EdgeWeight[i][j];
}
}
cout<<endl;
}
}
/***********************深度优先遍历算法***********************************/
void DeepTraOne(GraphMatrix *GM,int n)
{
int i;
GM->IsTrav[n]=1; //表示该顶点已经处理过
cout<<"->"<<GM->Vertex[n]; //输出标记过的顶点
//执行处理结点的操作
for(i=0;i<GM->VertexNum;i++)
{
if(GM->EdgeWeight[n][i]!=MaxValue&&!GM->IsTrav[i])
{
DeepTraOne(GM,i); //递归进行遍历
}
}
}
void DeepTraGraph(GraphMatrix *GM)
{
int i;
for(i=0;i<GM->VertexNum;i++) //清楚各顶点遍历标志
{
GM->IsTrav[i]=0;
}
cout<<"深度遍历结点:"<<endl;
for(i=0;i<GM->VertexNum;i++)
{
if(!GM->IsTrav[i]) //若该顶点没有被访问过
{
DeepTraOne(GM,i); //调用函数遍历
}
}
cout<<endl;
}
/**********************主函数部分******************************************/
int main()
{
GraphMatrix *GM;
CreateGraph(GM);
OutGraph(GM);
DeepTraGraph(GM);
return 0;
}
程序运行结果:
实际的图结构应该是是这样的:
C++图结构的图结构操作示例的更多相关文章
- java虚拟机的基本结构如图
1 java虚拟机的基本结构如图: 1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字 ...
- C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)
图的存储结构 1)邻接矩阵 用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息. 2)邻接表 3)十字链表 4)邻接多重表 5)边集数组 本文只用代码实现用 ...
- 算法与数据结构(四) 图的物理存储结构与深搜、广搜(Swift版)
开门见山,本篇博客就介绍图相关的东西.图其实就是树结构的升级版.上篇博客我们聊了树的一种,在后边的博客中我们还会介绍其他类型的树,比如红黑树,B树等等,以及这些树结构的应用.本篇博客我们就讲图的存储结 ...
- HTTP协议图--HTTP 协议报文结构
1.HTTP 报文 用于 HTTP 协议交互的信息被称为 HTTP 报文.请求端(客户端)的 HTTP 报文叫做请求报文:响应端(服务器端)的叫做响应报文.HTTP 报文本身是由多行(用 CR[car ...
- C#结构类型图
C#结构类型图 分类: C#
- [置顶]
openHAB 部分代码结构 UML 图
openHAB 部分代码结构 UML 图 ModelRepository: ItemRegistry: ItemUIProvider: WebAppServlet:
- 怎么看时序图--nand flash的读操作详解(转载)
出处:http://blog.chinaunix.net/uid-28852942-id-3992727.html这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知 ...
- 怎么看时序图--nand flash的读操作详解
出处:http://blog.chinaunix.net/uid-28852942-id-3992727.html 这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本 ...
- 怎么看时序图--nand flash的读操作详解 (转)
这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 ...
- Java JNA (三)—— 结构体使用及简单示例
JNA简介 JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna).JNA提供一组Java工具类 ...
随机推荐
- soundPool和audiofocus
audiofocus试验: 使用soundPool来写一个播放音频的porject. 资源初始化: setContentView(R.layout.activity_main); Button bt1 ...
- Spark Streaming与kafka整合实践之WordCount
本次实践使用kafka console作为消息的生产者,Spark Streaming作为消息的消费者,具体实践代码如下 首先启动kafka server .\bin\windows\kafka-se ...
- 配置VSFTP服务器
一.Linux FTP服务器分类: <1>wu-ftp <2>proftp=profession ftp <3>vsftp=very security ftp ...
- DELL RACADM 批量升级戴尔IDRAC固件
需求:通过服务器远程管理IP批量升级戴尔IDRAC固件 工具:racadm.ipmitool.Remote Access Configuration Tool 下载: 第一步,将要更新BMC IP写入 ...
- ADSL拨号连接
dotras是一个提供远程访问服务的组件,使用它可以方便的 进行宽带拨号连接 由于不同的系统中dotras调用的底层api可能不同,所以使用时要根据不同的系统使用不同的dotras. dotras目前 ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- (转)精通 JS正则表达式
精通 JS正则表达式 (精通?标题党 ) 正则表达式可以: •测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证 ...
- 在浏览器中打不开Oracle 11gR2的企业管理器页面
最简单的办法,重建EM 四个步骤: emca -repos drop emca -repos create emca -config dbcontrol db emctl start dbconsol ...
- c#geckofx文件流下载
备注:内容仅提供参考. ⒈添加引用:using Gecko; ⒉然后根据自己的情况在某个方法内添加事件: LauncherDialog.Download += new EventHandler< ...
- 前端/html5效果收藏
H5应用 9款漂亮的H5效果 8款漂亮的H5效果 36漂亮的button效果 颜色RGB表 省市二级联动