添加链接描述
走了一遍代码,具体描述见<<大话数据结构课本>>
//无向邻接矩阵
#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