IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Day9:图的邻接矩阵C语言实现 -> 正文阅读

[数据结构与算法]Day9:图的邻接矩阵C语言实现

1. 结构体定义

typedef struct {
    char *vex;
    int **arc;
    int vexNum, arcNum;
}MatrixGraph;

2. 初始化

void MatrixGraphInit(MatrixGraph *mg, int vexNum, char *vexs)
{
    mg->vexs = vexs;
    mg->vexNum = vexNum;
    mg->arcs = malloc(sizeof(int*) * vexNum);
    for(int i = 0;i < vexNum;i++){
        mg->arcs[i] = malloc(sizeof(int) * vexNum);
        memset(mg->arcs[i], 0, sizeof(int) * vexNum);
    }
    mg->arcNum = 0;
}

3. 定位结点的位置

int MatrixGraphLocateVex(MatrixGraph *mg, char vex)
{
    for(int i = 0;i < mg->vexNum;i++)
        if(vex == mg->vexs[i])
            return i;
    return -1;
}

4. 查找第一个邻接点

char MatrixGraphFirstAdjVex(MatrixGraph *mg, char vex)
{
    int vexNo = MatrixGraphLocateVex(mg, vex);
    if(vexNo < 0)
        return '\0';
    for(int i = 0;i < mg->vexNum;i++)
        if(mg->arcs[vexNo][i] > 0)
            return mg->vexs[i];
    return '\0';
}

5. 查找下一个邻接点

char MatrixGraphNextAdjVex(MatrixGraph *mg, char vex, char pre)
{
    int vexNo = MatrixGraphLocateVex(mg, vex);
    int start = MatrixGraphLocateVex(mg, pre);
    if(vexNo < 0 || start < 0)
        return '\0';
    for(int i = start + 1;i < mg->vexNum;i++)
        if(mg->arcs[vexNo][i] > 0)
            return mg->vexs[i];
    return '\0';
}

6. 插入弧

void MatrixGraphInserArc(MatrixGraph *mg, char vex1, char vex2)
{
    int vexNo1 = MatrixGraphLocateVex(mg, vex1);
    int vexNo2 = MatrixGraphLocateVex(mg, vex2);
    if(vexNo1 < 0 || vexNo2 < 0)
        return;
    mg->arcs[vexNo1][vexNo2] = 1;
    mg->arcs[vexNo2][vexNo1] = 1;
    mg->arcNum++;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:26:29  更:2022-03-11 22:28:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:32:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码