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;} 

程序运行结果:

实际的图结构应该是是这样的:


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 广州市人力资源社会保障局 甘肃人力资源保障厅 广州市人力资源和社会保障局 人力社会保障局社保网 深圳市人力资源社会保障局 贵阳人力资源 深圳市人力资源和社会保障局 重庆市人力资源和社会保障局 青岛市人力资源和社会保障局 罗德岛人力资源部 河南省人力资源和社会保障厅 重庆人力资源和社保局网 潍坊市人力资源和社会保障局 台山人才人力资源网 河南省人力资源社会保障厅 重庆市人力资源社会保障局 潍坊市人力资源社会保障局 广州市人力资源保障局 深圳市人力资源保障局 北京市人力资源和社会保障局 重庆市人力资源社会保障网 成都市人力资源和社会保障局 北京市人力资源社会保障局 吴江人力资源 贵阳人力资源社会保障网 重庆市人力资源和社会保障网 漯河市人力资源和社会保障局 成都市人力资源社会保障局 罗德岛人力资源 漯河市人力资源社会保障局 青岛市人力资源社会保障局 淄博人力资源网 济南市人力资源和社会保障局 胶州人力资源网 重庆市人力资源保障局 新疆人力资源和社会保障厅 人力资源服务公司 广东人力资源 广东省人力资源 人力资源公司 人力资源服务