图的邻接表存储
以有向网为例。以0代表无边。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define max 100
typedef int ArcType;
typedef int VerTexType;
//有向网
typedef struct
{
VerTexType vevx[max];
ArcType arcs[max][max];
int vexnum, arcnum;
}AMGraph;
int LocateVex(AMGraph G,VerTexType v)
{
int locate;
for (int i = 0; i < G.vexnum; i++)
{
if (v == G.vevx[i]) return i;
}
printf("无此节点\n");
}
void CreatDiGraph(AMGraph& G)
{
int v1, v2;
int w;
printf("输入定点数和边数:\n");
scanf("%d %d", &G.vexnum, &G.arcnum);
printf("输入顶点信息\n");
for (int i = 0; i < G.vexnum; i++)//输入顶点信息
{
scanf("%d", &G.vevx[i]);
getchar(); //吃掉空格
}
for (int i = 0; i < G.vexnum; i++)
for (int j = 0; j < G.vexnum; j++)
G.arcs[i][j] = 0; //初始化所有存在或不存在的边权值为0
printf("输入一条边依附的顶点及权值\n ");
for (int i = 0; i < G.arcnum; i++)
{
scanf("%d%d%d", &v1, &v2, &w);
int m = LocateVex(G, v1);
int n = LocateVex(G, v2);
G.arcs[m][n] = w; //给网中存在的边赋值。
}
}
void Print(AMGraph G) //输出
{
for (int i = 0; i < G.vexnum; i++)
for (int j = 0; j < G.vexnum; j++)
{
printf("%2d", G.arcs[i][j]);
if (j == G.vexnum - 1)printf("\n");
}
}
int main()
{
AMGraph G;
CreatDiGraph(G);
Print(G);
return 0;
}
结果: