邻接矩阵

本文介绍了一种使用邻接矩阵表示图数据结构的方法,并提供了一个C语言实现的例子。通过输入顶点数、边数及各边的权重,程序能够构建并输出相应的邻接矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //=======================================================================
//                  Adjacency Matrix
//     BY:CHLAWS   
//     TIME:08-8-4
//     PS:转载请别删除此备注
//=======================================================================

#include <stdio.h>
#include <stdlib.h>

#define MAX_VERTEX_NUM 20 //最大顶点数
typedef int AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵类型
typedef char VertexType;
typedef struct  {
 VertexType vexs[MAX_VERTEX_NUM];     //顶点表
 AdjMatrix arcs;                      //邻接矩阵
 int vexnum,arcnum;                   //图的顶点数和弧数
}MGraph;

int LocateVex(MGraph G,char u);
void CreateMGraph(MGraph &G);
void PrintMGraph(MGraph G);

void main()
{
 MGraph G;
 CreateMGraph(G);
 PrintMGraph(G);
}

int LocateVex(MGraph G,char u)

 int i;
 for (i=0;i<G.vexnum;i++)
 { 
  if (u == G.vexs[i]) return i;
 }
 if (i == G.vexnum)
 {
  printf("Error u!/n");
  exit(1);
 }

 return 0;
}

//建立邻接矩阵
//
void CreateMGraph(MGraph &G)

 int i,j,k,w; 
 char v1,v2;
 printf("Input vexnum & arcnum:");
 scanf("%d,%d",&G.vexnum,&G.arcnum);
 printf("Input Vertices:");
 scanf("%s",G.vexs);
 for (i=0;i<G.vexnum;i++)
  for (j=0;j<G.vexnum;j++)
   G.arcs[i][j]=0;
 for (k=0;k<G.arcnum;k++)
 {
  printf("Input Arcs(v1->v2 &w):/n");
  fflush(stdin);
  scanf("%c,%c,%d",&v1,&v2,&w);
  i=LocateVex(G,v1);
  j=LocateVex(G,v2);
  G.arcs[i][j]=w;
  //G.arcs[j][i]=w;
 }
 return;
}

void PrintMGraph(MGraph G)

 int i,j;
 printf("Output Vertices:");
 printf("%s",G.vexs); printf("/n");
 printf("Output AdjMatrix:/n");
 for (i=0;i<G.vexnum;i++)
 { 
  for (j=0;j<G.vexnum;j++)
   printf("%4d",G.arcs[i][j]);
  printf("/n");
 }
 return;
}
/*
有向图G
a → b

  \

c → d
*/


/*
Input vexnum & arcnum:4,4
Input Vertices:abcd
Input Arcs(v1,v2 &w):
a,b,1                //v1->v2,权值=1
Input Arcs(v1,v2 &w):
a,c,1
Input Arcs(v1,v2 &w):
c,d,1
Input Arcs(v1,v2 &w):
d,a,1
Output Vertices:abcd
Output AdjMatrix:
   0   1   1   0
   0   0   0   0
   0   0   0   1
   1   0   0   0
请按任意键继续. . .
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值