C数据结构学习历程(5) 图之数组表示法

来源:互联网 发布:sql查询不重复记录 编辑:程序博客网 时间:2024/04/25 15:21

     我是参照《严蔚敏数据结构ppt》http://wenku.baidu.com/view/3ff16fc20242a8956aece41d.html以及《严蔚敏c数据结构视频》来写的,因为ppt上有些错,而视频上的代码不全,自己另写了。ppt上错哪,我就不指出了,大家可以对照着看,就能发现不同之处。其中图这部分主要是《大话数据结构》来的。对于图前面的知识,之前写了但是忘了上传。

    对于图的数组表示法,记住struct里 包含几个变量就行。

#include<iostream>using namespace std;typedef char VertexType; //顶点类型typedef int EdgeType; //边上的权值类型#define MAXVEX 100#define INFINITY 65535  //用这个值代表无穷typedef struct{VertexType vexs[MAXVEX];      //顶点表EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵int numVertexes ,numEdges;    //图中当前的顶点数和边数}MGraph;//建立无向图的邻接矩阵void CreateMGraph(MGraph *G){int i,j,k,w;cout<<"输入顶点数和边数:"<<endl;cin>>G->numVertexes >>G->numEdges ;for(i=0;i<G->numVertexes ;i++){cout<<"输入顶点值:"<<endl;cin>>G->vexs [i];}for(i=0;i<G->numVertexes ;i++)for(j=0;j<G->numVertexes ;j++)G->arc [i][j]=INFINITY;           //邻接矩阵初始化for(k=0;k<G->numEdges ;k++){cout<<"输入边(vi,vj)上的下标i,下标j和权值w"<<endl;  //从下标0开始cin>>i>>j>>w;G->arc [i][j]=w;G->arc [j][i]=w;}}//DFS算法,邻接矩阵形式的typedef int Boolean;Boolean visited[MAXVEX];void DFS(MGraph G,int i){visited[i]=true;cout<<G.vexs[i] <<endl;  //打印 出来for(int j=0;j<G.numVertexes ;j++){if(!visited[j]&&G.arc [i][j]==1){DFS(G,j);}}}void DFSTraverse(MGraph G){for(int i=0;i<G.numVertexes ;i++)      //初始化别忘了{visited[i]=false;}for(int i=0;i<G.numVertexes ;i++)    //自己记下来的{if(!visited[i]){DFS(G,i);}}}int main(){MGraph p;CreateMGraph(&p);DFSTraverse(p);return 0;}







随便画的一个图,遍历如下 无向图



遍历结果为:



0 0
原创粉丝点击