有向图和无向图用邻接矩阵储存

一般存储图的方式有两种:一是用邻接矩阵表示,二是用邻接链表。

所谓用邻接矩阵,是用一个二维数组存储,边使用矩阵来构建模型,这使得每一个顶点和其它顶点之间都有边的有无 的 表示的机会。若有边,则他们交点 为1 ,否则为0。当然,如果是一副边有权值的图,交点存储的是他们边的权值。

1、首先收一下无向图的存储:

无向图的边的矩阵一定是一个对称矩阵,因为无向图只关心边是否存在,而不关心方向,V0和V1有边,那么V1和V0也有边。

因为这里不研究有圈图,所以主对角线都是0,输入V0和V1边的关系后,就不必输入V1和V0的关系了。

图解如下:

实现代码如下:
#include <iostream>
using namespace std;

#define MAX_VERTEX 4  //4个顶点的图

typedef char DataType;

typedef struct
{
	DataType vertexArr[MAX_VERTEX];       //顶点元素数组	 
	int edgeArr[MAX_VERTEX][ MAX_VERTEX]; //边矩阵二维数组 
}ArrayGraph;

void ArrayGraph_init(ArrayGraph *pGraph);
void ArrayGraph_create(ArrayGraph *pGraph);
void ArrayGraph_show(ArrayGraph *pGraph);

int main()
{
    ArrayGraph g;
    ArrayGraph_init(&g);       //初始化图 
    ArrayGraph_create(&g);     //创建图 
    ArrayGraph_show(&g);       //打印图 



    return 0;
}

//初始化为一个无圈图 ,也就是边矩阵中,主对角线元素都是0 
void ArrayGraph_init(ArrayGraph *pGraph)
{
    
    for (int i = 0; i < MAX_VERTEX; i++)

        pGraph->edgeArr[i][i] = 0;

}

//输入一个图 
void ArrayGraph_create(ArrayGraph *pGraph)
{
    

    for (int i = 0; i < MAX_VERTEX; ++i)    //填充顶点数组,也就是输入顶点元素 
    {
        printf("输入第%d个顶点值\n",i+1);
        
        scanf(" %c",&(pGraph->vertexArr[i])); 

    }

    for (int j = 0; j <MAX_VERTEX; ++j)   //填充边关系 
    {
        for (int i = j+1; i < MAX_VERTEX; &
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值