无向网邻接矩阵的建立和输出(c语言)

本文介绍了一个使用邻接矩阵表示无向网图的C语言程序。该程序包括了创建无向网图、输入顶点和边信息、以及输出邻接矩阵的功能。通过用户交互,可以自定义图的大小和边的权值。

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

实施效果如图所示:
在这里插入图片描述

实施代码如下所示:

#include <stdio.h>
#include <stdlib.h>
#define maxvex 100



typedef int EdgeType;                          /* 边上的权值类型 */
typedef struct
{

EdgeType arc[maxvex][maxvex];     /* 邻接矩阵,看作边表 */

int numnodes, numedges;                     /* 图中当前的顶点数和边数  */
}MGraph;



typedef struct EdgeNode                         /* 边表结点 */
{
struct EdgeNode *next;                      /* 链域,指向下一个邻接点 */
}EdgeNode;

typedef struct vertexnode /* 顶点表结点 */
{

char data[20]; /* 顶点域,存储顶点信息 */
EdgeNode *firstedge;/* 边表头指针 */
}vertexnode, AdjList[maxvex];


typedef struct
{
AdjList adjList;
EdgeType arc[maxvex][maxvex];
int numnodes, numedges; /* 图中当前顶点数和边数 */
}graphAdjList,*GraphAdjList;






int CreateMGraph(MGraph *G,GraphAdjList *G1)            /* 无向网图邻接矩阵表示 */
{
    *G1 = (GraphAdjList)malloc(sizeof(graphAdjList));
int i,j,w,k;
printf("输入顶点数目:");
scanf("%d",&G->numnodes);
printf("请输入图的边数目:");
scanf("%d",&G->numedges); /* 输入顶点数和边数 */
for(k=1;k<=G->numedges;k++)               /* 建立邻接矩阵 */
{
printf("请输入第%d条边连接(vi,vj)的第一个顶点下标i(i=1,2...):",k);
scanf("%d",&i);
printf("请输入第%d条边连接(vi,vj)的第二个顶点下标j(j=1,2...):",k);
scanf("%d",&j);
printf("请输入第%d条边的权值:",k);
scanf("%d",&w);
G->arc[i][j]=w;
G->arc[j][i]=w;
}
for(i=1;i<=G->numnodes;i++)
{
    printf("请输入第%d个的顶点信息:",i);
    scanf("%s",(*G1)->adjList[i].data);

}

}



void printCreateMGraph(MGraph *G,GraphAdjList *G1)
{int i,j;
for(i=1;i<=G->numnodes;i++)
printf("  V%d",i);
printf("\n\n");
for(i=1;i<=G->numnodes;i++)
{printf("V%d     |",i);
for(j=1;j<=G->numnodes;j++)
{if((i==j)||(G->arc[i][j]==NULL))
printf("   ∞");
else
printf("   %d",G->arc[i][j]);
}

printf("|\n");

}
return 1;
}



void menushow()
{
printf("                                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
printf("                                       ▄   0:结束循环退出                                 ▄\n");
printf("                                       ▄   1:创建无向网(用邻接矩阵存储)                   ▄\n");
printf("                                       ▄   2:[从1创建中进行]无向网的邻接矩阵的输出        ▄\n");
printf("                                       ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄\n");
}


int menuchoose()
{
int num;
printf("                                                          请输入(0-2):");
scanf("%d",&num);
return num;
}



int main()
{   MGraph G;
GraphAdjList G1;
int running=1;
menushow();
while(running)
{
switch(menuchoose())
{
case 1:
CreateMGraph(&G,&G1);
break;
case 2:
printCreateMGraph(&G,&G1);
break;

}
system("pause");
}
return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超维Ai编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值