无向图的领接矩阵为对称矩阵,有向图的领接矩阵可能是对称的,也可能是不对称的,有向图的领接矩阵和无向图相似。
无向图的领接矩阵。
#include <stdio.h>
typedef struct{
int arcs[20][20];
int vex[100];
int vexnum;
int arcnum;
}AdjMatrix;
void Create(AdjMatrix *G)
{
int i,j,k,weight,vex1,vex2,vexnum,arcnum;
printf("请输入无向网中的顶点数和边数:");
scanf("%d%d",&G->vexnum,&G->arcnum);
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->arcs[i][j]=0;
printf("请输入无向网中%d个顶点:",G->vexnum);
for(i=1;i<=G->vexnum;i++)
{
printf("NO.%d个顶点:",i);
scanf("%d",&G->vex[i]);
}
printf("请输入无向网中的%d条边:",G->arcnum);
for(k=0;k<G->arcnum;k++)
{
printf("NO.%d条边的下标:",k+1);
scanf("%d",&vex1);
scanf("%d",&vex2);
printf("权值:");
scanf("%d",&weight);
G->arcs[vex1][vex2]=weight;
G->arcs[vex2][vex1]=weight;
}
for(i=0;i<G->vexnum;i++)
{
for(j=0;j<G->vexnum;j++)
printf("%d ",G->arcs[i][j]);
printf("\n");
}
}
int main()
{
AdjMatrix G;
Create(&G);
}
有向图的领接矩阵。
#include <stdio.h>
typedef struct{
int arcs[20][20];
int vex[100];
int vexnum;
int arcnum;
}AdjMatrix;
void Create(AdjMatrix *G)
{
int i,j,k,weight,vex1,vex2,vexnum,arcnum;
printf("请输入无向网中的顶点数和边数:");
scanf("%d%d",&G->vexnum,&G->arcnum);
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->arcs[i][j]=0;
printf("请输入无向网中%d个顶点:",G->vexnum);
for(i=1;i<=G->vexnum;i++)
{
printf("NO.%d个顶点:",i);
scanf("%d",&G->vex[i]);
}
printf("请输入无向网中的%d条边:",G->arcnum);
for(k=0;k<G->arcnum;k++)
{
printf("NO.%d条边的起点下标和终点下标:",k+1);
scanf("%d",&vex1);
scanf("%d",&vex2);
printf("权值:");
scanf("%d",&weight);
G->arcs[vex1][vex2]=weight;
}
for(i=0;i<G->vexnum;i++)
{
for(j=0;j<G->vexnum;j++)
printf("%d ",G->arcs[i][j]);
printf("\n");
}
}
int main()
{
AdjMatrix G;
Create(&G);
}
可以看出有向领接矩阵图和无向领接矩阵图代码只是一点点不一样。无向对称,有向不一定对称。
以上代码在dev上调试通过