数据结构无向图的实现

博客提及走了一遍代码,具体描述可参考《大话数据结构》课本,还给出了具体的代码实现。

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

添加链接描述
走了一遍代码,具体描述见<<大话数据结构课本>>

//无向邻接矩阵
#include<iostream>
#include<iomanip>//精度设置必须包括的头文件
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define MAXVEX 100 //最大顶点数
#define INFINITY 65535
//邻接矩阵
typedef char Vertextype ;//顶点类型
typedef int Edgetype ;//边上的权值
typedef struct Mgraph//
{
Vertextype vexs[MAXVEX];//顶点表
Edgetype arc[MAXVEX][MAXVEX];//邻接矩阵
int numvertexes,numedges;//图中当前顶点数和边数
}Mgraph;
//创建图的邻接矩阵结构
void CreateMgraph(Mgraph *G){
int i,j,k,w;
cout<<"输入边数和顶点数:"<<endl;
cin>>G->numvertexes;//输入边数
cin>>G->numedges;//输入顶点数
for(i=0;i<G->numvertexes;i++)
{
cout<<"请输入第"<<i<<"个顶点:";
cin>>G->vexs[i];
}
//初始化
for(i=0;i<G->numvertexes;i++)
for(j=0;j<G->numvertexes;j++){
if(i==j)
	G->arc[i][j]=0;//无向图矩阵是对阵矩阵 对角线元素全为0
else
	G->arc[i][j]=INFINITY;//初始化的时候将其他值设置成为一个不可能的值  也就是书中的无穷大
}
for(k=0;k<G->numedges;k++){
cout<<"输入边(vi,vj)的下标i,下标j,以及权值w:"<<endl;
cin>>i>>j>>w;
//因为无向图是对称矩阵 所以会有以下操作
G->arc[i-1][j-1]=w;
G->arc[j-1][i-1]=w;
}
}
void ShowMgraph(Mgraph G){
int i,j;
cout<<"顶点元素为: "<<endl;
for(i=0;i<G.numvertexes;i++)
	cout<<G.vexs[i]<<" ";
cout<<endl;
cout<<"输出的邻接矩阵位:\n";
cout<<"\t";
for(i=0;i<G.numvertexes;i++)
	printf("%8c",G.vexs[i]);
for(i=0;i<G.numvertexes;i++){
	printf("\n%8c",G.vexs[i]);
for(j=0;j<G.numvertexes;j++){
if(G.arc[i][j]==65535)
//两点之间无连接时权值默认为65535
//在无向图中用"0"表示 在有向图中一般用"∞"
//这里为了方便  统一输出"∞"
printf("%8s","∞");
else
printf("%8d",G.arc[i][j]);
}
printf("\n");
}
cout<<endl;
}
int main(){
Mgraph G;
CreateMgraph(&G);
ShowMgraph(G);
return 0;

}

下面是具体的代码实现

输入边数和顶点数:
5
7
请输入第0个顶点:a
请输入第1个顶点:b
请输入第2个顶点:c
请输入第3个顶点:d
请输入第4个顶点:e
输入边(vi,vj)的下标i,下标j,以及权值w:1 3 1
输入边(vi,vj)的下标i,下标j,以及权值w:1 5 1
输入边(vi,vj)的下标i,下标j,以及权值w:2 3 1
输入边(vi,vj)的下标i,下标j,以及权值w:2 4 1
输入边(vi,vj)的下标i,下标j,以及权值w:2 5 1
输入边(vi,vj)的下标i,下标j,以及权值w:3 4 1
输入边(vi,vj)的下标i,下标j,以及权值w:3 5 1
顶点元素为: 
a b c d e 
输出的邻接矩阵位:
	       a       b       c       d       e
       a       0     ∞       1     ∞       1

       b     ∞       0       1       1       1

       c       1       1       0       1       1

       d     ∞       1       1       0     ∞

       e       1       1       1     ∞       0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值