#include <iostream>
using namespace std;
#define MaxVnum 100 //顶点数最大值
typedef char VexType; //顶点的数据类型,根据需要定义 //typedef:专门起外号的
typedef int EdgeType; //边上权值的数据类型,若不带权值的图,则为0或1
typedef struct{
VexType Vex[MaxVnum]; //顶点数组
EdgeType Edge[MaxVnum][MaxVnum]; //二维数组
int vexnum,edgenum; //顶点数,边数
}AMGraph;
int locatevex(AMGraph G,VexType x)
{
for (int i=0; i<G.vexnum; i++) //查找顶点信息的下标
if(x==G.Vex[i])
return i;
return -1; //没找到
}
void CreateAMGraph(AMGraph &G)
{
int i,j;
VexType u, v;
cout<<"请输入顶点数:"<<endl;
cin>>G.vexnum;
cout<<"请输入边数:"<<endl;
cin>>G.edgenum;
cout<<"请输入顶点信息:"<<endl;
for(int i=0; i<G.vexnum; i++) //输入顶点信息,存入顶点信息数组
cin>>G.Vex[i];
for(int i=0; i<G.vexnum; i++) //初始化邻接矩阵所有值为0,如果是网,则初始化为无穷大
for(int j=0; j<G.vexnum; j++)
G.Edge[i][j]=0;
cout<<"请输入每条边依附的两个顶点:"<<endl;
while(G.edgenum--)
{
cin>>u>>v;
i=locatevex(G,u); //查找顶点u的存储下标
j=locatevex(G,v); //查找顶点v的存储下标
if(i!=-1&&j!=-1)
G.Edge[i][j]=G.Edge[i][j]=1; //邻接矩阵储置1
else
{
cout<<"讨厌!你个大笨居输错了啦!!!"<<endl;
G.edgenum++; //本次输入不算
}
}
}
void print(AMGraph G) //输出邻接矩阵
{
cout<<"图的邻接矩阵为:"<<endl;
for(int i=0; i,G.vexnum; i++)
{
for(int j=0; j<G.vexnum; j++)
cout<<G.Edge[i][j]<<"\t";
cout<<endl;
}
}
int main()
{
AMGraph G;
CreateAMGraph(G);
print(G);
return 0;
}
数据结构与算法—邻接矩阵创建无向图
最新推荐文章于 2023-11-11 07:00:00 发布