带权 有向 图 邻接矩阵 建立 插入 删除

2023-11-11

#include<bits/stdc++.h>
using namespace std;
//带权有向用邻接矩阵存储的图
const int maxNodeNum=10;//最大顶点数

typedef struct agraph{//图的结构体
    int nodeNum;//顶点数
    int edgeNum;//边数
    int biao[maxNodeNum][maxNodeNum];//邻接矩阵,存储的是有向边的权值,不连接则为0
}agraph;

agraph* init_graph(agraph* ingraph)//初始化图
{
    memset(ingraph->biao,0,sizeof(ingraph->biao));
    return ingraph;
}

agraph* creat_graph(int n)//建立新图并初始化,输入的参数n是顶点数
{
    agraph* newgraph=new agraph();
    init_graph(newgraph);
    newgraph->nodeNum=n;
    newgraph->edgeNum=0;
    return newgraph;
}

void show_graph(agraph* ingraph)//输出这个图
{
    int nodeNum=ingraph->nodeNum;
    for(int i=0;i<nodeNum;i++)
    {
        for(int j=0;j<nodeNum;j++)
        {
            printf("%d ",ingraph->biao[i][j]);
        }
        printf("\n");
    }
}

int insertEdge_graph(agraph* ingraph,int x,int y,int weight)//插入带权有向边,参数分别是:图的指针、边的起始点、边的终点、边的权值(范围是不为0的整数) 返回值0、1、2,1为正常执行
{
    if((x>ingraph->nodeNum)||(y>ingraph->nodeNum)||(x<=0)||(y<=0))//超出范围,错误,返回2
    {
        return 2;
    }
    else{
        x-=1;y-=1;//将xy调整到数组对应坐标
        if(ingraph->biao[x][y]!=0)//值不为0说明已经有边了,错误,返回0
        {
            return 0;
        }
        else if (ingraph->biao[x][y]==0)//正常插入
        {
            ingraph->biao[x][y]=weight;
            ingraph->edgeNum++;
            return 1;
        }
    }
}
int deleteEdge_graph(agraph* ingraph,int x,int y)//删除边,参数分别是:图的指针、边的起始点、边的终点 返回值0、1、2,1为正常执行
{
    if((x>ingraph->nodeNum)||(y>ingraph->nodeNum)||(x<=0)||(y<=0))//超出范围,错误,返回2
    {
        return 2;
    }
    else{
        x-=1;y-=1;//将xy调整到数组对应坐标
        if(ingraph->biao[x][y]==0)//值为0说明没有边,错误,返回0
        {
            return 0;
        }
        else if (ingraph->biao[x][y]!=0)//正常删除
        {
            ingraph->biao[x][y]=0;
            ingraph->edgeNum--;
            return 1;
        }
    }
}
int main()
{
    agraph* graph1=creat_graph(3);
    show_graph(graph1);
    insertEdge_graph(graph1,1,1,5);
    insertEdge_graph(graph1,2,1,-3);
    show_graph(graph1);
    cout<<graph1->edgeNum<<endl;
    deleteEdge_graph(graph1,1,1);
    show_graph(graph1);
    cout<<graph1->edgeNum<<endl;
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带权 有向 图 邻接矩阵 建立 插入 删除 的相关文章

随机推荐

  • 数据库系统原理教程 第二章 关系数据库 习题解答

    第二章 关系数据库 一 选择题 1 下面的选项不是关系数据库基本特征的是 A A 不同的列应有不同的数据类型 B 不同的列应有不同的列名 C 与行的次序无关 D 与列的次序无关 2 一个关系只有一个 D A 候选码 B 外码 C 超码 D
  • 关于react的面试题(持续更新中...)

    目录 1 说说React生命周期中有哪些坑 如何避免 2 说说Real diff算法是怎么运作的 3 调和阶段setState干了什么 4 说说redux的实现原理是什么 写出核心代码 5 React合成事件的原理 6 React组件之间如
  • 云服务器怎么修改初始密码,云服务器更改初始密码

    云服务器更改初始密码 内容精选 换一换 本文介绍通过华为云市场镜像 Drupal内容管理系统 LAMP 搭建Drupal网站的方法 Drupal是使用PHP语言编写的开源内容管理框架 CMF 它由内容管理系统 CMS 和PHP开发框架 Fr
  • vue怎么制作甘特图——dhtmlx-gantt

    引入 7 0不支持中文 npm i dhtmlx gantt 6 0 0 s 封装组件gantt
  • centos8安装mysql8

    本文主要介绍如何在Centos8下安装Mysql 一 下载Mysql 使用wget命令下载mysql安装包 确保系统已经安装了wget 如果没有安装 执行 yum install wget 安装 wget https repo mysql
  • React的基础概念JSX

    1 创建一个用react写的页面 div div
  • 面试那些题(1)

    更新ing 一 Canvas和SVG的区别是什么 1 Canvas主要是用笔刷来绘制2D图形的 2 SVG 主要是用标签来绘制不规则矢量图的 3 相同点 都是主要用来画2D图形的 4 不同点 Canvas画的是位图 SVG画的是矢量图 5
  • 检查服务器的系统类型,查看服务器的操作系统类型

    查看服务器的操作系统类型 内容精选 换一换 查看用户的镜像类型 如果是公共镜像则排除私有镜像的源镜像问题 镜像类型单击 申请服务器 查看能否创建出此镜像的弹性云服务器 申请完成后未出现此镜像对应的弹性云服务器 则此类镜像可能已经下线 属于老
  • git出现fatal: Authentication failed for ‘http:xxxx.git/‘‘

    在git上clone的时候 输入用户名和密码第一遍输错以后 之后就无法再自动弹出输入用户名和密码的窗口了 出现错误如下 fatal Authentication failed for http xxxx git 解决办法 git confi
  • 【Linux】UDP、TCP协议

    目录 前言 1 UDP协议 1 1 UDP协议段格式 1 2 UDP的特点 1 3 UDP的缓冲区 2 TCP协议 2 1 TCP报文格式 2 2 TCP的确认应答机制 2 3 流量控制 2 4 标志位 2 4 1 ACK SYN 2 4
  • 时间序列预测方法总结

    时间序列预测方法总结 数据准备 方法1 朴素法 方法2 简单平均法 方法3 移动平均法 方法4 简单指数平滑法 平面预测 优化 方法5 霍尔特 Holt 线性趋势法 方法6 Holt Winters季节性预测模型 加法分量形式 方法7 自回
  • #pragma预处理指令

    pragma是C和C 编译器提供的一种预处理指令 preprocessor directive 用于控制编译器的行为或指示特定的编译器选项 它以 pragma开头 后面跟着不同的命令或参数 pragma指令在源代码被编译之前由预处理器进行处
  • 热烈祝贺开源社顾问委员会委员姜宁当选 2022 Apache 软件基金会新任董事~

    设计 张千禧 内容 SegmentFault思否 Apache软件基金会官网 责编 李明康 在刚刚结束的 ASF Annual Meeting 上 2022 年新任 ASF Member 及董事会成员诞生了 Apache 软件基金会通过官方
  • iOS vs Flutter(语法篇)

    iOS开发者入门Flutter 首先说一下 为什么要关心iOS和Flutter的区别问题 因为移动端开发的业务逻辑设计模式等是一致的 区别可能只在于使用的语言不同 实现逻辑的风格不同而已 所以这里我们先分析一下iOS和Flutter的区别到
  • 华为OD机试真题-单向链表的中间节点/哈希表【2023Q1】

    题目描述 求单向链表中间的节点值 如果奇数个节点取中间 偶数个取偏右边的那个值 输入描述 第一行 链表头节点地址path 后续输入的节点数n 后续输入每行表示一个节点 格式 节点地址 节点值 下一个节点地址 1表示空指针 输入保证链表不会出
  • 多线程与高并发v2.0版

    多线程是程序员面试时常常会面对的问题 对多线程概念的掌握和理解水平 也会被一些面试官用来衡量一个人的编程实力的重要参考指标 另附一张思维导图供大家参考学习 不论是实际工作需要还是为了应付面试 掌握多线程都是程序员职业生涯中一个必须经过的环节
  • SSM整合web项目访问同时html和jsp页面

    ssm 配置请看 https blog csdn net qq 19688207 article details 114578526 spm 1001 2014 3001 5501 html页面访问路径 http localhost 808
  • 第八章 多态(下)

    第八章 多态 下 本章多态目前就到此介绍完毕 可能还会有些疑问 不过后面还会有很多设计到多态的地方 通过不断学习 最后一定会将这些知识掌握的 同时这一章所讲解的知识也还是比较详细的 多态基本上都会在我们的代码中体现出来 只是之前不知道 不明
  • java.sql.SQLRecoverableException: IO 错误: Undefined Error错误解决办法

    应用报错 java sql SQLRecoverableException IO 错误 Got minus one from a read call 据开发人员描述 起多个服务 最后服务的时候报这个错 无论最后的服务是啥 提供的报错日志 是
  • 带权 有向 图 邻接矩阵 建立 插入 删除

    include