#include<stdio.h>
#define MaxVerTax 100
#define MaxInt 32767 //定义边的权重值
typedef char VerTaxType; //节点类型
typedef int AcrType;//边的类型
typedef struct AdjMatrix {
//定义节点数组
VerTaxType vexs[MaxVerTax];
//定义边数组。二维数组,邻接矩阵
AcrType arcs[MaxVerTax][MaxVerTax];
// 定义定点的数量和边的数量的变量
int vexsNum,arcsNum;
}AMGraph;
//定义一个:根据顶点确定顶点的序号
int LocateVexNum(AMGraph G,VerTaxType a){
for(int i=0;i<G.arcsNum;i++){
if(G.vexs[i]==a){
return i;
}
}
}
//初始化邻接矩阵的函数,二维便利全是 MaxVerTax
int initialMatrix(AMGraph *G){
for (int i = 0; i < MaxVerTax; i++)
{
for (size_t j = 0; j < MaxVerTax; j++)
{
G->arcs[i][j]=MaxInt;
}
}
return 0;
}
//输出矩阵
void printMaxtrix(AMGraph *G){
printf(" ");
for (int i = 0; i < G->vexsNum; i++)
{
printf("%5c ",G->vexs[i]);
}
printf("\n");
for (int i = 0; i < G->vexsNum; i++)
{ printf("%c: ",G->vexs[i]);
for (int j = 0; j <G->vexsNum; j++)
{
if(i==j){
printf("%5d ",0);
}else {
/* code */
printf("%5d ",G->arcs[i][j]);
}
// printf("%5d ",G->arcs[i][j]);
}
printf("\n");
}
}
//定义创建邻接矩阵的方法
int CreateAMGraph(AMGraph *G,int invexNum,int inarcNum){
// 输入顶点的数量和边的数量
int vexsNum,arcsNum;
//通过实参传递进来
G->vexsNum=invexNum;
G->arcsNum=inarcNum;
//顶点的数量和边的数量
vexsNum= G->vexsNum;
arcsNum= G->arcsNum;
//输入顶点
for (int i = 0; i < vexsNum; i++)
{
G->vexs[i]='a'+i;
}
// 输入边的权重值
for(int j=0;j<arcsNum;j++){
// 输入每一对节点的内容,来获取对应的边
VerTaxType node1;
VerTaxType node2;
AcrType value;
scanf("%c,%c,%d",&node1,&node2,&value);
getchar();
//根据节点得知节点在节点数组中的序号
int x=LocateVexNum(*G,node1);
int y=LocateVexNum(*G,node2);
//在二维数组中,根据序号,输入相应的权值
G->arcs[x][y]=value;
}
// printf("%d",arcsNum);
return 0;
}
// int main(int argc, char const *argv[])
// {
// AMGraph xxx;
// initialMatrix(&xxx);
// CreateAMGraph(&xxx,7,12);
// printMaxtrix(&xxx);
// return 0;
// }
数据结构——邻接矩阵——顺序存储
最新推荐文章于 2023-09-05 23:07:18 发布