采用邻接矩阵创建带权无向图:
①统计图中边的个数并输出;
②统计图中各顶点的度并输出;
③统计网图的总权重;
④统计度为n的顶点个数(n可以为0、1、2、…);
//邻接矩阵
#include <stdio.h>
#include <stdlib.h>
#define INFINITY 65535 //∞设为65535
#define MAXVERTEXNUM 100 //最大顶点数设为100
int d[100];
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv; //顶点数
int Ne; //边数
int G[MAXVERTEXNUM][MAXVERTEXNUM]; //邻接矩阵
char Data[MAXVERTEXNUM];
};
typedef PtrToGNode MGraph; //以邻接矩阵存储的图类型
MGraph BuildGraph()
{
MGraph Graph;
int i,j,k,weight;
char a,b;
Graph = (PtrToGNode)malloc(sizeof(struct GNode));
printf("请输入顶点数和边数:");
scanf("%d %d",&Graph->Nv,&Graph->Ne);
for(i = 0;i < Graph->Nv; i++)
{
getchar(); //getchar()函数是输入一个字符,用此函数将scanf()未处理的量进行释放;
printf("请输入第%d个顶点,数组位置为%d:",i+1,i);
scanf("%c",&Graph->Data[i]); //输入顶点数据
}
for(i = 0;i < Graph->Nv; i++)
for(j = 0;j < Graph->Nv; j++)
Graph->G[i][j] = INFINITY; //初始化邻接矩阵
for(k = 0;k < Graph->Ne ; k++)
{
printf("请输入第%d条边的顶点信息与边的权值(格式为:起点数据 终点数据 权重):",k+1);
getchar();
scanf("%c %c %d",&a,&b,&weight);
for( i = 0; Graph->Data[i] != a;i++)
; //找到顶点a在邻接矩阵中的下标
for( j = 0; Graph->Data[j] != b;j++)
; //找到顶点b在邻接矩阵中的下标
Graph->G[i][j] = weight;
Graph->G[j][i] = weight;
}
return Graph;
}
MGraph pri(){ //输出函数
MGraph Graph_1;
int i,j,k,sum;
sum=0;
//图中边的个数
printf("图中边的个数:%d\n",Graph_1->Ne);
//统计图中各顶点的度并输出
for(i = 0;i < Graph_1->Nv;i++){
for(j = 0;j < Graph_1->Nv;j++){
if(Graph_1->G[j][i] != INFINITY){
sum++;
}
}
d[i]=sum;
sum=0;
}
for(i = 0;i<Graph_1->Nv;i++){
printf("第%c个顶点度为:%d\n",i+'A',d[i]);
}
//网图的总权重
sum=0;
for(i = 0;i<Graph_1->Nv;i++){
for(j=0;j<=i;j++){
if(Graph_1->G[i][j]!=INFINITY){
sum+=Graph_1->G[i][j];
}
}
}
printf("网图的总权重%d\n",sum);
//统计度为n的顶点个数
j=0;
k=0;
while(k!=Graph_1->Nv){
sum=0;
for(i = 0;i < Graph_1->Nv;i++){
if(j == d[i]){
sum++;
k++;
}
}
printf("度为%d的顶点个数:%d\n",j,sum);
j++;
}
}
int main(void){
BuildGraph();
pri();
return 0;
}

本文介绍如何使用邻接矩阵实现带权无向图的创建过程,并提供了统计图中边的数量、各顶点的度数、网图总权重及度为特定数值的顶点数量的方法。
&spm=1001.2101.3001.5002&articleId=110590275&d=1&t=3&u=b7130218b3944a60bf7dddac0105abba)
2737

被折叠的 条评论
为什么被折叠?



