一、算法步骤:
1、先把图的总顶点数和总边数输入进去。
2、输入每个顶点具体信息。
3、初始化领接矩阵的值为最大值。
4、构造邻接矩阵即输入每条边依附的两个顶点和相应的权值。
5、把该权值加入到相应的邻接矩阵中去。同时对称边也赋予相同的权值。
二、相关步骤代码实现:
1、头文件:
#include<iostream>
#define MaxInt 32736
#define MVNum 100
#define OK 1
using namespace std;
2、定义一个网的结构体:
typedef struct{
char vexs[MVNum];//顶点数组
int arcs[MVNum][MVNum];//邻接矩阵数组
int vexnum,arcnum;//图的总顶点数和总边数
}AMGraph;
3、找到每条边依附顶点的位置:
int LocateChar(AMGraph G,char v){
for(int i=0;i<G.vexnum;i++){
if(G.vexs[i]==v)
return i;
}
}
4、初始、构造邻接矩阵:
void CreateUDN(AMGraph &G){
cout<<"请输入所创建图的总顶点数和总边数:"<<endl;
cin>>G.vexnum>>G.arcnum;
//输入每个顶点的信息
for(int i=0;i<G.vexnum;i++){
cout<<"请输入第"<<(i+1)<<"个顶点的信息:"<<endl;
cin>>G.vexs[i];
}
//初始化邻接矩阵
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++)
G.arcs[i][j]=MaxInt;
}
//构造邻接矩阵
for(int k=0;k<G.arcnum;k++){
char v1,v2;
int v3;
cout<<"请输入第"<<(k+1)<<"条边依附的顶点和去权值:"<<endl;
cin>>v1>>v2>>v3;
//找到顶点的相应位置
int i = LocateChar(G,v1);
int j = LocateChar(G,v2);
G.arcs[i][j]=v3;
G.arcs[j][i]=v3; //置<v1, v2>的对称边<v2, v1>的权值为w
}
}
5、主函数:
int main(){
AMGraph G;
CreateUDN(G);
cout<<"您用邻接矩阵构造的无向网如下:"<<endl;
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++){
if(j!=G.vexnum-1){ //横向输出邻接矩阵中的元素
if(G.arcs[i][j]==MaxInt){
cout<<"∞"<<"\t";
}else
cout<<G.arcs[i][j]<<"\t";
}else{
if(G.arcs[i][j]==MaxInt){
cout<<"∞"<<endl;
}else
cout<<G.arcs[i][j]<<endl;
}
}
}
}
三、结果截图: