1.邻接矩阵的表示方法
用0和1表示
无向图:的邻接矩阵是对称的,图中的边的数目是矩阵中1的个数的一半。顶点i的度为第i行或第i列1的个数。第i行j列的值为1表示顶点i和顶点j之间有边相连
有向图:矩阵不一定对称,图中的有向边的数目是矩阵1的个数,顶点i的入度为第i列的1的个数,顶点i的出度为第i行1的个数。第i行j列的值为1表示顶点i和顶点j之间有边相连。
邻接矩阵的存储表示:
图的邻接矩阵的类型:
#define MaxSize 100 /*最大的顶点数*/ typedef char VertexType; /*顶点的类型*/ typedef int wType; /*边上的权重类型*/ typedef struct { VertexType vexs[MaxSize]; /* 顶点表*/ wType w[MaxSize][MaxSize]; /*邻接矩阵,可看做边表*/ int vexnum,w; }AdjMatrix;
无向图邻接矩阵的算法:
void CreatGraph(AdjMatrix *G) /*建立无向图的邻接矩阵表示*/ { int i,j,k; scanf("%d%d",&G->vexnum,&G->wnum);/*输入顶点数和边数*/ getchar(); for(i=0;i<G->vexnum;i++) for(j=0;j<G->vexnum;j++) G->w[i][j]=0; /*邻接矩阵初始化*/ for(k=0;k<G->wnum;k++) /*读入wnum条边*/ {scanf("%d%d",&i,&j); /*输入表示边(vi,vj)的顶点序号i,j*/ G->w[i][j]=1; G->w[j][i]=1; } }
。。。。。待续