图的表示邻接矩阵

邻接矩阵(adjacency matrix)是图的最基本的实现方式,使用方阵A[n][n]表示有n个顶点构成的图,其中每个单元,各自负责描述一对顶点之间可能存在的邻接关系。

对于无权图,存在(不存在)从顶点u到v的边,当且仅当A[u][v]=1(0)。下图没无向图和有向图的邻接矩阵的实例。

图的表示邻接矩阵_第1张图片

这一方式如果推广至带权的网络,各邻接矩阵可以从布尔型改为整型或者浮点型,记录所对应边的权重。对于不存在的边,通常统一取值为0或者无穷。

图的表示邻接矩阵_第2张图片

时间性能,静态和动态操作仅需要O(1)。代价为空间的冗余。及时向量在扩容的代价很大,就分摊意义而言,单次操作的耗时亦不过O(n)

空间性能,空间总量渐进地不超过O(n^{2})。对于无向图而言有改进的余地,无向图的邻接矩阵必为对称阵,除自环以外的每条边,都重复地存放了两次。所以,近一半的单元都是冗余的。可以使用压缩存储等技巧,进一步提高空间效率。

实现(有权无向图)

#include
using namespace std;
typedef struct
{
    char vertex[105]; // 顶点
    int am[105][105]; // 领接矩阵
    int vertexn; // 点数
    int edgen; // 边数
}creat;
void creatn(creat &m)
{
    cout<<"输入顶点数和边数:"<>m.vertexn;
    cin>>m.edgen;
    cout<<"输入顶点:"<>m.vertex[i];
    }
    for(int i=0;i>a>>b>>c;
        m.am[a][b]=c;
        m.am[b][a]=m.am[a][b];
    }
}
void print(creat m)
{
    for(int i=0;i

 图的表示邻接矩阵_第3张图片

你可能感兴趣的:(#,408数据结构)