您的位置:首页 > 理论基础 > 数据结构算法

图的邻接矩阵c语言表示(无向网)---《数据结构》算法7.2

2016-02-18 13:33 351 查看
邻接矩阵是图的一种表示法,构造具有n个顶点和e条边的无向网G的时间复杂度为(n^2+e*n),代码如下:
#include<stdio.h>
#define infinity 2000000000
#define MAX_VERTEX_NUM 100
typedef enum{DG,DN,UDG,UDN} GraphKind;
typedef struct {
int vexs[MAX_VERTEX_NUM];
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum,arcnum;
GraphKind kind;
}MGraph;
int LocateVex(MGraph G,int v){
for(int i=0;i<G.vexnum;i++){
if(G.vexs[i]==v)return i;
}
}
void CreateUDN(MGraph &G){
int i,j,k;
G.kind=UDN;//图的类型为无向网
printf("输入顶点个数和弧的个数:\n");
scanf("%d%d",&G.vexnum,&G.arcnum);//输入顶点个数,弧额条数,以及是否有关于弧的相关信息
printf("输入各个顶点的名称(数字):\n");
for(i=0;i<G.vexnum;i++)
scanf("%d",&G.vexs[i]);//输入各个顶点,这里顶点的数据类型默认为int类型
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;//初始化图
printf("输入各条弧的两个顶点和权值:\n");
for(k=0;k<G.arcnum;k++){
int v1,v2,weight;
scanf("%d %d %d",&v1,&v2,&weight);//输入弧的两个顶点
i=LocateVex(G,v1);j=LocateVex(G,v2);//寻找两个顶点在矩阵中的位置
G.arcs[i][j]=weight;
G.arcs[j][i]=G.arcs[i][j];//置<v1,v2>的对称弧<v2,v1>
}
}
void Print(MGraph G){
for(int i=0;i<G.vexnum;i++){
for(int j=0;j<G.vexnum;j++)
printf("%d ",G.arcs[i][j]);
printf("\n");
}
}
int main(){
MGraph G;
CreateUDN(G);
Print(G);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  无向网 邻接矩阵