C++邻接矩阵构造无向图和无向网

假设我们要创建一个无向图的邻接矩阵

C++邻接矩阵构造无向图和无向网

#include<iostream> 
#define OK 1
#define ERROR 0
#define MaxNum 100		//最大顶点数 
typedef char VexType;	//顶点数据类型为char型 
typedef int VarType;	//边的数据类型为int型 
typedef int Status;
using namespace std;
struct  DIAgram{
	VexType vexs[MaxNum];	//顶点数组 
	VarType vars[MaxNum][MaxNum];	//邻接矩阵
	int vexnum,arcnum;	//图的总顶点数和总边数 
};
int place(DIAgram G,char v)
{
	for(int i=0;i<G.vexnum;i++)
	{
		if(G.vexs[i]==v)	//返回顶点下标 
		return i;
	}
	return ERROR;
}
Status CreateUDG(DIAgram &G)
{	
	int i,a,b;char v1,v2;
	cin>>G.vexnum>>G.arcnum;	//输入图的总顶点数和总边数 
	for(i=0;i<G.vexnum;i++)
	{
		cin>>G.vexs[i];			//输入每个顶点的信息 
		for(int j=0;j<G.vexnum;j++)
		G.vars[i][j]=0;	//矩阵的每个元素即边初始化为0 
	}
	for(i=0;i<G.arcnum;i++)
	{
		cin>>v1>>v2;			//输入一条边两头的的两个顶点 
		a=place(G,v1);b=place(G,v2);	//根据输入的顶点信息找到对应的下标 
		G.vars[a][b]=1; 				//每个连接上的边设为1 
		G.vars[b][a]=G.vars[a][b];	//对称边也设为1 
	}
	return OK;
}
void print(DIAgram G)
{
	for(int i=0;i<G.vexnum;i++)
	{
		for(int j=0;j<G.vexnum;j++)
		cout<<G.vars[i][j]<<" ";
		cout<<endl;
	}
	
}
int main()
{
	DIAgram G;
	CreateUDG(G);
	print(G);
	return 0;
}

这个无向图有5个顶点,6条边,因此我们需要创建一个5*5的邻接矩阵,然后输入每个顶点的信息,等会就按照你输入的信息查找相应顶点的下标。

结果如图所示:
C++邻接矩阵构造无向图和无向网

创造无向网和创造无向图非常相似,只是初始化的时候不是0而是无穷大,多了权值的输入输出:

#include<iostream> 
#define OK 1
#define ERROR 0
#define MaxInt 32767	//极大值为32767(无穷 )
#define MaxNum 100		//最大顶点数 
typedef char VexType;	//顶点数据类型为char型 
typedef int VarType;	//边的权值数据类型为int型 
typedef int Status;
using namespace std;
struct  DIAgram{
	VexType vexs[MaxNum];	//顶点数组 
	VarType vars[MaxNum][MaxNum];	//邻接矩阵
	int vexnum,arcnum;	//网的总顶点数和总边数 
};
int place(DIAgram G,char v)
{
	for(int i=0;i<G.vexnum;i++)
	{
		if(G.vexs[i]==v)
		return i;
	}
	return ERROR;
}
Status CreateUDN(DIAgram &G)
{	
	int i,a,b,w;char v1,v2;
	cin>>G.vexnum>>G.arcnum;	//输入网的总顶点数和总边数 
	for(i=0;i<G.vexnum;i++)
	{
		cin>>G.vexs[i];			//输入每个顶点的信息 
		for(int j=0;j<G.vexnum;j++)
		G.vars[i][j]=MaxInt;	//矩阵的每个元素即每个权值初始化为无穷大 
	}
	for(i=0;i<G.arcnum;i++)//构造邻接矩阵
	{
		cin>>v1>>v2>>w;//输入一条边两头的的两个顶点和权值
		a=place(G,v1);b=place(G,v2);
		G.vars[a][b]=w;
		G.vars[b][a]=G.vars[a][b];
	}
	return OK;
}
void print(DIAgram G)
{
	for(int i=0;i<G.vexnum;i++)
	{
		for(int j=0;j<G.vexnum;j++)
		cout<<G.vars[i][j]<<" ";
		cout<<endl;
	}
	
}
int main()
{
	DIAgram G;
	CreateUDN(G);
	print(G);
	return 0;
}