c++实现图的邻接矩阵表示法

#include
using namespace std;
#define INFINITY INT_MAX//最大值
#define MAX_VERTEX_NUM 20//最大顶点数
#define OK 1
#define ERROR 0
int visited[MAX_VERTEX_NUM];
typedef int VertexType;
typedef struct ArcCell
{
int adj;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vexs[MAX_VERTEX_NUM];//顶点向量
AdjMatrix arcs;//邻接矩阵
int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
int LocateVex(MGraph &M,VertexType v)//确定顶点位置
{
int k;
for(k=0;k{
if(M.vexs[k]==v)
return k;
}
return -1;//没有这个顶点
}
int CreateDG(MGraph &M)//创建有向图
{
int i,j,k;
int weight=1;
VertexType v1,v2;
cout<<"输入有向图的顶点数和弧数:";
cin>>M.vexnum>>M.arcnum;
for(i=0;ifor(j=0;jM.arcs[i][j].adj=0;
cout<<"输出图的"<for(i=0;icin>>M.vexs[i];
cout<<"建立弧,请输入"<for(k=0;k{
cin>>v1>>v2;
i=LocateVex(M,v1);
j=LocateVex(M,v2);
if(i<0||j<0)
return ERROR;
M.arcs[i][j].adj=weight;
}
return OK;
}
int CreateDN(MGraph &M)//创建有向网
{
int i,j,k;
int weight;
VertexType v1,v2;
cout<<"输入无向图的顶点数和弧数:";
cin>>M.vexnum>>M.arcnum;
for(i=0;ifor(j=0;jM.arcs[i][j].adj=0;
cout<<"输出网的"<for(i=0;icin>>M.vexs[i];
cout<<"建立弧,请输入"<for(k=0;k{
cin>>v1>>v2>>weight;
i=LocateVex(M,v1);
j=LocateVex(M,v2);
if(i<0||j<0)
return ERROR;
M.arcs[i][j].adj=weight;
}
return OK;
}
int CreateUDG(MGraph &M)//创建无向图
{
int i,j,k;
int weight=1;
VertexType v1,v2;
cout<<"输入无向图的顶点数和弧数:";
cin>>M.vexnum>>M.arcnum;
for(i=0;ifor(j=0;jM.arcs[i][j].adj=0;
cout<<"输出图的"<for(i=0;icin>>M.vexs[i];
cout<<"建立弧,请输入"<for(k=0;k{
cin>>v1>>v2;
i=LocateVex(M,v1);
j=LocateVex(M,v2);
if(i<0||j<0)
return ERROR;
M.arcs[i][j].adj=weight;
M.arcs[j][i].adj=M.arcs[i][j].adj;
}
return OK;
}
int CreateUDN(MGraph &M)//创建无向网
{
int i,j,k;
int weight;
VertexType v1,v2;
cout<<"输入无向图的顶点数和弧数:";
cin>>M.vexnum>>M.arcnum;
for(i=0;ifor(j=0;jM.arcs[i][j].adj=0;
cout<<"输出网的"<for(i=0;icin>>M.vexs[i];
cout<<"建立弧,请输入"<for(k=0;k{
cin

>>v1>>v2>>weight;
i=LocateVex(M,v1);
j=LocateVex(M,v2);
if(i<0||j<0)
return ERROR;
M.arcs[i][j].adj=weight;
M.arcs[j][i].adj=M.arcs[i][j].adj;
}
return OK;
}
void PrintMatrix(MGraph &G)//输出邻接矩阵
{
int i,j;
printf("邻接矩阵为:\n");
for(i=0;i{
for(j=0;jcout<cout<}
}
int main()
{
MGraph M;
M.vexnum=M.arcnum=0;
CreateDG(M);
PrintMatrix(M);
CreateUDG(M);
PrintMatrix(M);
CreateUDN(M);
PrintMatrix(M);
CreateDN(M);
PrintMatrix(M);
return 0;
}

相关文档
最新文档