C++图结构的图结构操作示例
来源:互联网 发布:桂圆淘宝 编辑:程序博客网 时间:2024/04/28 03:44
示例代码:
/*By qianshou2013/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++图结构的图结构操作示例
- 图的结构与操作
- C语言结构体示例
- C语言中结构体的操作
- 访问结构体结构成员的示例
- [数据结构][C语言]图的基本介绍和操作实现之图的存储结构
- c语言之图的存储结构
- C语言 结构体的应用 查询结构体中的信息 结构体与指针操作
- 【C/C++】qt库结构及示例
- 【C/C++】qt库结构及示例
- 数据库操作示例(B/S结构)
- 一个结构体的示例
- C#BitVector32结构操作说明
- C:文件结构“图”[openjudge1777]
- C语言嵌套结构体示例
- 图的邻接矩阵存储结构基本操作的实现
- C的结构
- c的结构体
- 禅修促进自我成长
- Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)
- Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (初级)
- 简易文本编辑器分析
- strchr
- C++图结构的图结构操作示例
- U-Boot启动过程完全分析
- poj 2840 Big Clock
- 接口
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- Microsoft Enterprise Library 5.0 系列教程(三) Validation Application Block (高级)
- 无线高清显示技术
- 下列应用程序,产生两个组合框,一个可以选择月份,一个可以选择2000~2009年之间的年份。
- 自动刷新页面