邻接矩阵的深度优先递归算法

本文介绍了图的概念及其在邻接矩阵中的表示方式,特别是无向图的对称矩阵特性。文章详细阐述了权值、顶点和边的存储,并提供了一个用于创建无向网的C语言实现,包括结构体定义和输入处理。算法通过用户输入构建邻接矩阵,初始化权值为无穷大,并处理边的存在与权值。
摘要由CSDN通过智能技术生成

邻接矩阵

概念:用两个数组来表示图的相关关系.一个一维数组用来储存数组的顶点信息,另一个二维数组用来存储边(或弧)的信息。一般是设计为有则为1,无则为0(总之就是以数值不太能区分).

无向图
以此图为,A→B 为1,而 A→D 则为0.

有向图
以此图为,1→5 为0, 5→1就为1了!
(无向图是对称矩阵)

概念:边(或弧)上带有权值的图就叫做网.

权值

概念:定义的路径上面的值.作用随情况而定

路径

概念:指的是图(包括有向图和无向图)里面连接两个结点之间的边的集合,也就是一个顶点序列

……

算法实现思维

:以带权值的来讨论,就有三个数据需要考虑,权值储存、顶点数储存、边(或弧)的存在与否储存.

权值:可正,可负,可为零(int数据类型足以).
顶点:用一个一维数组储存.
边(或弧):用一个二维数组,存在就储存权值,不存在就为默认的无穷大值即可.

算法实现

//构造结构体
typedef char VertexType;//顶点类型由用户决定
typedef int EdgeTpye;//边(或弧)的类型也由用户决定
#define MAXVEX 100 //最大顶点数也由用户决定
#define INFINITY 56789 //设置无穷大
typedef struct {
	VertexType vex[MAXVEX];//顶点表(数组)
	EdgeType arc[MAXVEX][MAXVEX];//边表,储存权值(边或弧)
	int numVertexes,numEdges;//相对应为顶点数和边数.
	}MGraph;
//无向图的邻接矩阵表示
void CreateMGraph(MGraph *G)
{
	int i, j ,k ,w;
	printf("请输入顶点数和边数(用空格隔开):");
	scanf("%d %d",&G->numVertexes,G->numEdges);
	puts("\n接下来请输入顶点信息:");
	for(i=0; i<G->numVertexes; ++i)
	{
		fflush(stdin);//清楚缓冲区(消除回车对字符读入的影响)
		printf("第%d个:",i+1);
		scanf("%c",&G->vex[i]);
		printf("\n");
	}
	for(i=0; i<G->numVertexes; ++i){
		for(j=0; j<G->numEdges; ++j){
			G->arc[i][j]=INFINITY;//设置边(或弧)的初始值为无穷大
		}
	}
	for(k=0; k<G->numEdges; ++k){
		printf("请输入(Vi,Vj)上的上标i,下标j和权值w(空格隔开):");
		scanf("%d %d %d",&i,&j,&w);
		G->arc[i][j]=w;//将对应边的权值记录
		G->arc[i][j]=G->arc[j][i];//此行代码只有无向图才适用,因为是对称矩阵
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值