图的邻接矩阵算法
Posted 超浪*牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的邻接矩阵算法相关的知识,希望对你有一定的参考价值。
- 无向图的邻接矩阵是关于左上右下对角线对称的,有向图不一定对称
- 先得理解矩阵描述的图,或者明白图的矩阵描述概念。
图的邻接矩阵存储结构
#define MAX 100
typedef struct{
char vexs[MAX]; //顶点表
int arc[MAX][MAX];//邻接矩阵,也就是边的关系表
int numVertexes,numEdges;//图中的定点数和边数
}MGaph;
根据邻接矩阵的定义,可得到建立图的邻接矩阵算法。
- 算法描述:首先得到图的顶点数和边数、然后按照顶点的数量后再将顶点的名称逐一放入字符存储数组当中、再把关系矩阵全部初始化置零、知道边数,利用一个循环把每两条边的关系描述出来。
/*建立无向图邻接矩阵*/
void GreatMGaph(MGaph *G){
int i,j,k;
char ch1,ch2;
printf("请输入顶点数和边数:");
scanf("%d%d",&G->numEdges,&G->numVertexes);
getchar();
printf("顶点边数输入成功!\\n");
/*输入顶点信息(名称)*/
for(i=0;i<G->numEdges;i++){
printf("请输入第%d个顶点name:",i+1);
scanf("%c",&(G->vexs[i]));
getchar();
}
/*建立顶点之间的联系*/
//置零
for(i=0;i<G->numEdges;i++){
for(j=0;j<G->numEdges;j++){
G->arc[i][j] = 0;
}
}
//输入关系
for(k=0;k<G->numVertexes;k++){
printf("建立第%d条边:",k+1);
scanf("%c,%c",&ch1,&ch2);
getchar();
for(i=0;i<G->numEdges;i++){
for(j=0;j<G->numEdges;j++){
if(ch1 == G->vexs[i] && ch2 == G->vexs[j]){
G->arc[i][j] = 1;//可以在此处修改为带权的图
G->arc[j][i] = 1;//无向图对称,该语句作用
}
}
}
}
}
最后还得输出这个邻接矩阵
void DisPlay(MGaph *G){
int i,j;
for(i=0;i<G->numEdges;i++){
for(j=0;j<G->numEdges;j++){
printf("%d ",G->arc[i][j]);
}
printf("\\n");
}
}
当然要实现整个矩阵的建立及输出还要编写主函数
int main() {
MGaph G;//图G
GreatMGaph(&G);
DisPlay(&G);
return 0;
}
以上是关于图的邻接矩阵算法的主要内容,如果未能解决你的问题,请参考以下文章