我是参照《严蔚敏数据结构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;
}
随便画的一个图,遍历如下 无向图
遍历结果为: