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

来源:互联网 发布:程序员被前妻勒索照片 编辑:程序博客网 时间:2024/04/30 15:25
邻接矩阵是图的一种表示法,构造具有n个顶点和e条边的无向网G的时间复杂度为(n^2+e*n),代码如下:
#include<stdio.h>#define infinity 2000000000#define MAX_VERTEX_NUM 100typedef 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;}

0 0
原创粉丝点击