邻接矩阵实现

例图

分析

变量

  • 需要一个链表来保存数据-即保存结点
  • 需要一个二维数组来保存每个变得权值,有则填入具体数值,没有则用0
  • 定义一个保存边个数的值

函数方法

  • 得到图中边的个数
  • 得到结点的数据
  • 得到具体边的权值
  • 插入结点,删除节点
  • 插入边,删除边
  • isEmpty,size
  • 广度优先遍历,深度优先遍历

具体实践

  • 插入,删除结点与边
    我认为邻接矩阵的变换是根据结点来变化的。所以我先定义了构造函数它传入参数n,作为初始值,用来帮助实例化结点链表和二维数组。
    public AMgroup (int n){edges = new int [n][n];myList = new ArrayList<>(n);NumEdges = 0;room = n;}

插入结点并不改变二维数组本身,除非插入的结点个数大于初始参数n;但删除结点时就不得不考虑由于结点remove导致二维数组中该节点参与的横和列都不能填入值,0也不可以,应该移除此横和列,重新定义新的数组。

    public void helpRemoveEdges(T item){int position = myList.indexOf(item);int[][] Newedge = new int[room-1][room-1];for (int i=0;i<room;i++){if (i==position){continue;}if (i<position){for (int j=0;j<room;j++){if (j==position)continue;if (j<position)Newedge[i][j]=edges[i][j];if (j>position)Newedge[i][j-1]=edges[i][j];}}if (i>position){for (int j=0;j<room;j++){if (j==position)continue;if (j<position)Newedge[i-1][j]=edges[i][j];if (j>position)Newedge[i-1][j-1]=edges[i][j];}}}edges = Newedge;}
  • 插入删除的具体代码
    public void insertEdge(int x,int y,int weight){edges[x][y]=weight;NumEdges++;}public void removeEdge(int x,int y){edges[x][y]=0;NumEdges--;}public void insertNode(T item){myList.add(item);}public void removeNode(T item){helpRemoveEdges(item);myList.remove(item);}
  • 深度优先遍历

    1.访问初始结点v,并标记结点v为已访问。
    2.查找结点v的第一个邻接结点w。
    3.若w存在,则继续执行4,否则算法结束。
    4.若w未被访问,对w进行深度优先遍历递归(即把w当做另一个v,然后进行步骤123)。
    5.查找结点v的w邻接结点的下一个邻接结点,转到步骤3

转载于:https://www.cnblogs.com/wbiao21/p/7859855.html

王彪-20162321《程序设计与数据结构2nd》-第十一周学习总结与实验报告相关推荐

  1. # 学号 2017-2018-20172309 《程序设计与数据结构》第十一周学习总结

    ---恢复内容开始--- 学号 2017-2018-20172309 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 第23章 初识Android操作系统:一个多用户的Linux ...

  2. 20172310 2017-2018-2 《程序设计与数据结构》第十一周学习总结

    20172310 2017-2018-2 <程序设计与数据结构>第十一周学习总结 作业要求 1.教材第23-26章(Java和Android开发学习指南) 代码托管到git@OSC,参考一 ...

  3. 20172313 2017-2018-2 《程序设计与数据结构》第十一周学习总结

    20172313 2017-2018-2 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 第23章 Android简介 第24章 初识Android Android Studio ...

  4. 20172327 2017-2018-2 《程序设计与数据结构》第十一周学习总结

    学号 2017-2018-2 <程序设计与数据结构>第十周学习总结 作业要求 1.教材第23-26章(Java和Android开发学习指南) 代码托管到git@OSC,参考一下使用开源中国 ...

  5. 20162329 2017-2018-1 《程序设计与数据结构》第十一周学习总结

    第十一周学习总结 一.学习目标 了解图的分类 了解图的遍历 常用图算法 图的实现策略 二.学习内容 1.图的分类 ① 无向图: 表示边的顶点对是无序的图被称为无向图 无向图中若任意两个顶点间都有一条边 ...

  6. 王彪20162321 2016-2017-2 《程序设计与数据结构》第6周学习总结

    王彪20162321 2016-2017-2 <程序设计与数据结构>第6周学习总结 教材学习内容总结 -1.关键概念 1.继承是从已有类派生一个新类的过程. 2.继承的目的之一是复用已有的 ...

  7. 王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结

    王彪 2016-2017-2 <程序设计与数据结构>第5周学习总结 教材学习内容总结 1.关键概念 1.面向对象程序设计的核心是类的定义,它代表了状态和行为的对象. 2.变量的作用域依赖于 ...

  8. 王彪20162321 2016-2017-2 《程序设计与数据结构》第7周学习总结

    学号20162321 2016-2017-2 <程序设计与数据结构>第七周学习总结 教材学习内容总结 关键概念 多态引用在不同的时候可以指向不同类型的对象 多态引用在运行时才将方法调用与它 ...

  9. 20162303 2016-2017-2 《程序设计与数据结构》第六周学习总结

    20162303 2016-2017-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 通过继承来创建类,比从零开始编写代码来的更快.更容易也更经济. 继承在父类与子类之间建立了 ...

最新文章

  1. Python可视化神器Yellowbrick使用
  2. Linux的shell脚本函数教程
  3. Java Review - 并发组件ConcurrentHashMap使用时的注意事项及源码分析
  4. 数据库 分库 分表 分区
  5. 如何ASP.NET Core Razor中处理Ajax请求
  6. WPS for MacOS如何设置自动编号
  7. 解析Hibernate中的持久化—ORM
  8. CentOS6.7系统优化加强牢固脚本
  9. GNS3环境搭建与测验实战图文详解
  10. mysql 数据库快速入门 结构化查询语言SQL
  11. EventBus源码解析 1
  12. c语言输入abc求方程的根,编写程序,输入系数abc,计算任意二次方根的实根
  13. Ajax上传文件(视频),并获取上传进度、上传速度和剩余时间。
  14. 苹果计算机做视频教程,Mac版Final Cut Pro x使用技巧及视频教程
  15. 手机端和pc端浏览器兼容性问题
  16. mysql客户端用什么 知乎_知乎面试记
  17. StringWriter介绍
  18. 荒岛余生2java攻略_荒岛余生2
  19. 最简单的方波变三角波__RC一阶电路__方波变三角波
  20. nodejs和js之间有什么区别?

热门文章

  1. ZH奶酪:Ionic中(弹出式窗口)的$ionicModal使用方法
  2. Windows服务无法引用.dll的错误
  3. oracle如何创建视图
  4. Cannot set property 'value' of undefined
  5. HBae找不到协处理器导致RegionServer全部挂掉
  6. beeline执行sql文件_MyBatis的SQL执行流程不清楚?看完这一篇就够了
  7. python里else中文意思_Python循环语句中else的用法总结
  8. c#网页自动化脚本语言,c# – 创建用于创建网页的脚本语言
  9. 解决git@github.com: Permission denied (publickey). Could not read from remote repository
  10. 2022中国素质教育行业报告