图算法-----图的邻接矩阵表示法(数组表示法)

#include <stdio.h>
#include<conio.h>

#define MAX_VERTEX_NUM 20
#define Ok 1
#define Error 0
typedef int VRTYPE;
typedef int VertexType;
typedef int Adjmatrix;
typedef int Status;
typedef struct ArcCell{
	VRTYPE adj;
  // InfoType *info;
}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];// 邻接矩阵的结构体定义
typedef struct {
	VertexType vexs[MAX_VERTEX_NUM];//用来存储节点信息的数组
	AdjMatrix arcs;//邻接矩阵
	int vexnum,arcnum;//图当前定点数和弧度数
}MGraph; //存储方法的结构体定义

Status Initailmap(MGraph &m)//初始化图(把所有的信息都归为0)
{
	int i,j;
	m.arcnum=0;
	m.vexnum=0;
	for(i=0;i<MAX_VERTEX_NUM;i++)
	{
		for(j=0;j<MAX_VERTEX_NUM;j++)
		{
			m.arcs[i][j].adj=0;
		}
	}
	return Ok;
}
Status InsertVex(MGraph &m)//插入节点的信息
{
	char  ch;
	printf("请输入节点的名字");
	ch =getchar();
	getchar();
	m.vexs[m.vexnum]=ch;
	m.vexnum++;
	printf("插入成功,插入的节点为:%c",ch);
	return Ok;
}
Status Insertarcs(MGraph &m)//插入胡的信息
{
	char n1,n2;
	int i,j;
	printf("请输入无向图弧的两个节点的名字:\n");
	n1=getchar();
	getchar();
	n2=getchar();
	getchar();   //输入一个湖两个节点后,将邻接矩阵中值改为1
	for(i=0;i<m.vexnum;i++)
	{
		if(m.vexs[i]==n1)
			break;
	}
	for(j=0;j<m.vexnum;j++)
	{
		if(m.vexs[j]==n2)
			break;
	}
	m.arcs[i][j].adj=m.arcs[j][i].adj=1;
	printf("弧的信息成功输入到邻接矩阵中\n");
	m.arcnum++;
	return Ok;
}
Status Showvexnum(MGraph &m)
{
	printf("图中的节点数为:%d\n",m.vexnum);
	return Ok;
}
Status Depth(MGraph &m)//查询节点的度
{
	char ch;int i,j,depth;
	depth=0;
	printf("请输入要查询的节点");
	ch=getchar();
	getchar();
	for(i=0;i<m.vexnum;i++)
	{
		if(m.vexs[i]==ch)
			break;
	}
	for(j=0;j<m.vexnum;j++)
	{
		if(m.arcs[i][j].adj==1)
			depth++;
	}
	printf("节点的度为:%d\n",depth);
	return Ok;
}
Status  ShowAdjMatrix(MGraph &m )//显示邻接矩阵
{
	int i,j ;
	printf("图的邻接矩阵为:\n");
	for(i=0;i<m.vexnum;i++)
	{
		for(j=0;j<m.vexnum;j++)
		{
			printf("%d ",m.arcs[i][j].adj);
			if(j==m.vexnum-1)
				printf("\n");
		}
	}
	return Ok;
}
void main()
{
	MGraph m;
	int i;
	bool j=true;
	Initailmap(m);
	while(j)
	{
    printf("**请输入您想要干什么**\n");
	printf("1插入图节点\n");
	printf("2插入图的弧\n");
	printf("3当前的结点个数\n");
	printf("4查询指定节点的度\n");
	printf("5查看整个图\n");
	printf("0结束\n");
	i=getchar();
	getchar();
	switch(i)
	{
	case '0':
		j=false;
		break;
	case '1':
		InsertVex(m);
		break;
	case '2':
		Insertarcs(m);
		break;
	case '3':
		Showvexnum(m);
		break;
	case '4':
		Depth(m);
		break;
	case '5':
		ShowAdjMatrix(m);
		break;
	}
	}
}
//算法分析:1.数组表示法完全是由一个二维数组来存储一个邻接矩阵来存储图中弧的信息,谁与谁相连

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值