#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFINITY INT_MAX
#define MAX_VERTEX_NUM 20//最大顶点个数
typedef char VertexType;
typedef int status;
typedef struct ArcCell
{
int adj;//用1和0来表示是否相邻
} ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
VertexType vexs[MAX_VERTEX_NUM];//顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数
int kind; //图的种类标志
} MGraph;
//用邻接矩阵构造有向图或无向图
status CreateGraph1(MGraph &G)
{
int i,j;
int kind;
printf("请选择:1:建立有向图;2:建立无向图\n");
scanf("%d",&kind);
if(kind==1)
G.kind=1;
else if(kind==2)
G.kind=0;
else
{
printf("输入错误!\n");
return OVERFLOW;
}
printf("请输入顶点数:\n");
scanf("%d",&G.vexnum);
printf("依次输入%d个顶点:\n",G.vexnum);
getchar();
for(i=0; i<G.vexnum; i++)
scanf("%c",&G.vexs[i]);
printf("请输入0或1来表示是否相邻:\n");
for(i=0; i<G.vexnum; i++)
{
for(j=0; j<G.vexnum; j++)
scanf("%d",&G.arcs[i][j].adj);
}
printf("创建成功!\n");
return OK;
}//
//利用邻接矩阵求有向图和无向图的顶点的度
status vexdu1(MGraph &G)
{
int i,j,k,v1,v2;
if(G.kind==0)
{
for(i=0; i<G.vexnum; i++)
{
k=0;
for(j=0; j<G.vexnum; j++)
if(G.arcs[i][j].adj==1)
k++;
printf("第%d个顶点即%c的度为:%d\n",i+1,G.vexs[i],k);
}
}
else if(G.kind==1)
{
for(i=0; i<G.vexnum; i++)
{
v1=v2=0;
for(j=0; j<G.vexnum; j++)
{
if(G.arcs[i][j].adj==1)
v1++;
if(G.arcs[j][i].adj==1)
v2++;
}
printf("第%d个顶点即%c的出度为:%d,入度为:%d\n",i+1,G.vexs[i],v1,v2);
}
}
return OK;
}//
//主函数
int main()
{
MGraph G;
CreateGraph1(G);
vexdu1(G);
return 0;
}
用邻接矩阵构造有向图或无向图
最新推荐文章于 2022-08-21 17:55:37 发布