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工具类 ...
随机推荐
- iomanip
在c++程序里面经常见到下面的头文件 #include <iomanip> io代表输入输出,manip是manipulator(操纵器)的缩写(在c++上只能通过输入缩写才有效.) 2作 ...
- thinkphp3.2.3 成功对接支付宝接口
一.首先下载支付宝官方接口,下载地址: https://b.alipay.com/order/productDetail.htm?productId=2012111200373124&tabI ...
- WinHeap.H
网上找到的,对 Windows Heap 有详细的定义. // file winheap.h typedef void VOID; typedef unsigned __int8 UINT8; typ ...
- Excel连接字符串(Oledb)
Excel的连接字符串参数详解 2011-07-27 15:43:50| 分类: 编程专栏 | 标签:excel 连接字符串 参数 含义 |字号大中小 订阅 程序中读取Excel ...
- Arcgis android - Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
报错: Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE Please check logcat output for more deta ...
- maven发布时在不同的环境使用不同的配置文件
在开发时,不同的环境总会使用到不同的配置.如本地,测试,预发布,发布等环境,像数据库这些都要使用到不同的配置.如果手动改的话肯定会十分的麻烦. 还好maven提供的功能能够帮我们解决这个问题. 我们通 ...
- 1201.1——Vim编辑器的相关操作
一 vi的操作模式 vi提供两种操作模式:输入模式(insert mode)和指令模式(command mode).在输入模式下,用户可输入文本资料.在指令模式下,可进行删除.修改等各种编辑动作. 在 ...
- Xcode 7 warnings: object file was built for newer iOS version than being linked
编译之后出现: ld: warning: object file xxxxx... was built for newer iOS version (8.1) than being linked (7 ...
- CAGradientLayer实现色差动画
效果图: 代码部分: RPGradientAnimationView.h #import <UIKit/UIKit.h> typedef enum : NSUInteger { RPGra ...
- String类扩展
String s1=new String("fsdfsd"); String s2=new String("fsdfsd"); String a1=" ...