#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.数组表示法完全是由一个二维数组来存储一个邻接矩阵来存储图中弧的信息,谁与谁相连
图算法-----图的邻接矩阵表示法(数组表示法)
最新推荐文章于 2021-10-30 08:57:17 发布