首页 > 其他分享 >数据结构学习笔记-求图的邻接顶点

数据结构学习笔记-求图的邻接顶点

时间:2024-05-18 17:08:36浏览次数:23  
标签:return int 邻接 firstadj 顶点 求图 数据结构 adj

求图的邻接顶点

问题描述:已知图G用邻接矩阵存储,设计算法以分别实现函数firstadj(G,v)和nextadj(G,v,w)。

【算法设计思想】

firstadj(G,V )函数:

  1. 遍历顶点 v 的所有可能邻接顶点(即矩阵 G[v][j] 的所有列)。
  2. 对于每一个顶点 j,检查 G[v][j] 是否不等于 0(表示 vj 之间有边)。
  3. 如果找到这样的顶点 j,则返回 j
  4. 如果遍历完所有顶点都没有找到,则返回 -1

nextadj( G,V,W)函数:

  1. 遍历顶点 v 的所有可能邻接顶点,从 w + 1 开始(即矩阵 G[v][j] 的所有列,从 w + 1 开始)。
  2. 对于每一个顶点 j,检查 G[v][j] 是否不等于 0(表示 vj 之间有边)。
  3. 如果找到这样的顶点 j,则返回 j
  4. 如果遍历完所有顶点都没有找到,则返回 -1

【算法描述】

// 寻找顶点v的第一个邻接顶点
int firstadj(int G[N][N], int v) {
    for (int j = 0; j < N; j++) {
        if (G[v][j] != 0) {
            return j;
        }
    }
    return -1;
}

// 在顶点v的所有邻接顶点中,寻找顶点w的下一个邻接顶点
int nextadj(int G[N][N], int v, int w) {
    for (int j = w + 1; j < N; j++) {
        if (G[v][j] != 0) {
            return j;
        }
    }
    return -1;
}

【完整的测试程序】

#include <stdio.h>

#define N 5 // 假设图中有N个顶点

// 函数声明
int firstadj(int G[N][N], int v);
int nextadj(int G[N][N], int v, int w);

int main() {
    // 示例邻接矩阵,可以表示无向图或有向图
    int G[N][N] = {
        {0, 1, 0, 0, 1},
        {1, 0, 1, 1, 0},
        {0, 1, 0, 1, 0},
        {0, 1, 1, 0, 1},
        {1, 0, 0, 1, 0}
    };

    // 遍历图中每个顶点的邻接顶点
    for (int v = 0; v < N; v++) {
        printf("Vertex %d: ", v);
        // 寻找顶点v的第一个邻接顶点
        int adj = firstadj(G, v);
        if (adj != -1) {
            printf("%d ", adj);
            // 循环寻找顶点v的所有其他邻接顶点
            while ((adj = nextadj(G, v, adj)) != -1) {
                printf("%d ", adj);
            }
        }
        printf("\n");
    }

    return 0;
}

// 寻找顶点v的第一个邻接顶点
int firstadj(int G[N][N], int v) {
    for (int j = 0; j < N; j++) {
        if (G[v][j] != 0) {
            return j;
        }
    }
    return -1;
}

// 在顶点v的所有邻接顶点中,寻找顶点w的下一个邻接顶点
int nextadj(int G[N][N], int v, int w) {
    for (int j = w + 1; j < N; j++) {
        if (G[v][j] != 0) {
            return j;
        }
    }
    return -1;
}

标签:return,int,邻接,firstadj,顶点,求图,数据结构,adj
From: https://www.cnblogs.com/zeta186012/p/18199494

相关文章

  • 方方方的数据结构
    总算给我看懂到底是什么意思了。。。首先我们来考虑按照时间+扫描线进行处理,假设操作如下黑色是加操作,黄色是乘操作,绿色是加操作,对于红色那条线所代表的点,随着时间的流逝,首先在刚刚进入黑色的时候,这一点的值就被加上了一个数,然后刚刚进入黄色的时候,这一点的值就被乘上了一个数,......
  • 数据结构学习笔记-有向图的度
    求有向图的度问题描述:已知有向图G用邻接矩阵存储,设计算法以分别求解顶点vi的入度、出度和度。【算法设计思想】出度的计算(getOutDegree)遍历法:通过遍历邻接矩阵中顶点vi所在行的所有元素来计算vi的出度。对于每个元素matrix[vi][j],如果其值不为0(表示存在从顶点vi到顶点......
  • dijkstra迪杰斯特拉算法(邻接表法)
    ​算法简易过程:迪杰斯特拉算法(朴素)O(n^2)G={V,E}V:点集合E:边集合初始化时令S={某源点ear},T=V-S={其余顶点},T中顶点对应的距离(ear,Vi)值若存在,d(ear,Vi)为弧上的权值,dist【i】若不存在,d(ear,Vi)为无穷大,dist【i】循环n-1次(n个点):1、从T中选......
  • Python知识 | Python的数据结构有哪些?
    Python的数据结构有哪些?Python数据结构概览在Python中,数据结构是编程语言的基础,它们决定了数据如何组织和存储。Python的标准库提供了多种内置数据结构,包括:列表(List)列表是一种可变的序列,可以随时添加、删除或修改其元素。列表以方括号[]表示,元素可以是任何类型的数据。元组(T......
  • 数据结构简介及PYTHON里的数据类型
    1、什么是数据结构?先介绍几个概念。信息是目前在生活和工作中最经常听到的一个词,但要给信息这个概念一个容易理解的确切定义并不容易。人们希望用计算机处理的终极对象就是客观存在的各种信息,因此说计算机是处理信息的工具。数据是信息的载体,是指计算机(程序)能够处理的符号形式......
  • 数据结构概述
    数据结构定义我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法数据结构=个体+个体的关系算法=对存储数据的......
  • 数据结构:红黑树
    满足五条性质:1.根节点一定是黑色2.叶节点一定是黑色空心3.节点非黑即红4.红色节点孩子节点一定是黑色的即不会出现连续的红色节点5.任意一个节点到叶节点路径上黑色节点数量一样多 右旋操作:1.该节点和左孩子断开连接2.左孩子替代......
  • 设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真
    文件IO练习题设计程序,实现在LCD上任意位置显示一张任意大小的色深为24bit的bmp图片,要求图像不失真可以在开发板的LCD上显示。代码:/****************************************************************************************************************** * filename : Show......
  • (转载)数据结构-02 中缀表达式转后缀表达式并计算值
    1.图解中缀表达式转后缀表达式通过 数据结构-01-图解后缀表达式值计算方式 我们了解到后缀表达式(例如:931-3*+102/+)对计算机运算的方便,但是它却让我们这些人类十分的难受,因此我们需要在设计一个,中缀表达式转后缀表达式的程序来一劳永逸. 规则:依次遍历表达式,1.如......
  • (转载)数据结构-01-图解后缀表达式值计算方式
    目录:数据结构-01-图解后缀表达式值计算方式数据结构-02图解中缀表达式转后缀表达式并计算值1.简介问题:我们平常使用的数学表达式大多数是“中缀表达式”例如:9+(3-1)×3+10÷2,对人比较友好,但是这个对计算机计算并不友好,因为计算机无法智能判断运算顺序的问题(比如说乘法加......