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

     我是参照《严蔚敏数据结构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;
}








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



遍历结果为:



猜你喜欢

转载自blog.csdn.net/snailyww/article/details/52165300