#include<bits/stdc++.h>
using namespace std;
/**********邻接矩阵***********/
#define MaxInt 32767 //极大值
#define MVNum 100 //最大顶点数
#define OK 1
typedef char VerTexType; //顶点数据为字符型
typedef int ArcType; //边的权值类型为int
typedef struct{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前点数和边数
}AMGraph;
int LocateVex(AMGraph G, VerTexType v){
//确定点v在G中的位置
for(int i=0;i<G.vexnum;++i)
if(G.vexs[i]==v)return i;
return -1;
}
int CreateUND(AMGraph &G){
int i,j,k;
cout<<"请输入总顶点数,总边数,以空格隔开:";
cin>>G.vexnum>>G.arcnum;
cout<<endl;
cout<<"输入点的名称,如a"<<endl;
for(int i=0;i<G.vexnum;++i){
cout<<"请输入第"<<(i+1)<<"个点的名称:";
cin>>G.vexs[i];
}
cout<<endl;
for(i=0;i<G.vexnum;++i)
for(j=0;j<G.vexnum;++j)
G.arcs[i][j]=MaxInt;
cout<<"输入边依附的顶点及权值,如 a b 5"<<endl;
for(k=0;k<G.arcnum;++k){
VerTexType v1,v2;
ArcType w;
cout<<"输入第"<<(k+1)<<"条边衣服的顶点及权值:";
cin>>v1>>v2>>w;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G.arcs[i][j]=w;
G.arcs[i][j]=G.arcs[i][j];
}
return OK;
}
int main(){
cout<<"采用邻接矩阵表示法创建的无向网"<<endl<<endl;
AMGraph G;
int i,j;
CreateUND(G);
cout<<endl;
cout<<"邻接矩阵表示法创建的无向网"<<endl;
for(i=0;i<G.vexnum;++i){
for(j=0;j<G.vexnum;++j){
if(G.arcs[i][j]!=MaxInt)
cout<<G.arcs[i][j]<<"\t";
else cout<<"∞"<<"\t";
}
cout<<endl;
}
cout<<endl;
return 0;
}