图的邻接矩阵的存储
程序员文章站
2022-05-21 08:51:51
...
#include <stdio.h>
#include <stdlib.h>
//<<邻接矩阵>>
typedef struct MGraph{
int vexs[100];//由来存放顶点元素
int arcs[100][100];//用来存储两个顶点之间是否有边,有1,无0
int vexnum;//定点数
int arcnum;//边数
}MGraph;
int Locate(int vexs[],int v,int vexnum)//返回这个数字在顶点数组中的下标
{
int i;
for(i = 0;i < vexnum;i ++)
{
if(v == vexs[i])
{
return i;
}
}
}
void CreateGraph(MGraph &G)
{
int i,j;
int pos1,pos2;
int v1,v2;
printf("输入顶点个数和边数");
scanf("%d %d",&G.vexnum,&G.arcnum);
printf("输入顶点的数据:\n");
for(i = 0;i < G.vexnum;i ++)
{
scanf("%d",&G.vexs[i]);
}
for(i = 0;i < G.vexnum;i ++)
{
for(j = 0;j < G.vexnum;j ++)
{
G.arcs[i][j] = 0;
}
}
printf("输入两个边的端点\n");
for(i = 0;i < G.arcnum;i ++)
{
scanf("%d %d",&v1,&v2);
//printf("******\n");
pos1 = Locate(G.vexs,v1,G.vexnum);
printf("pos1 = %d\n",pos1);
pos2 = Locate(G.vexs,v2,G.vexnum);
printf("pos2 = %d\n",pos2);
G.arcs[pos1][pos2] = 1;//无向图的边是没有方向的所以1到2有边 ,那2到1也有边,对称的
G.arcs[pos2][pos1] = 1;
}
printf("打印这个图的邻接矩阵\n");
for(i = 0;i < G.vexnum;i ++)
{
if(i == 0)
{
printf(" ");
}
printf("%d ",G.vexs[i]);
}
printf("\n");
printf("------------------------\n");
for(i = 0;i < G.vexnum;i ++)
{
printf("%d ",G.vexs[i]);
printf("|");
for(j = 0;j < G.vexnum;j ++)
{
printf("%d ",G.arcs[i][j]);
}
printf("\n");
}
}
int main()
{
MGraph G;
//Locate(G.vexs,)
CreateGraph(G);
}
上一篇: Dijkstra(反向建图)
下一篇: 【图】Dijkstra算法