邻接矩阵实现

例图

分析

变量

  • 需要一个链表来保存数据-即保存结点
  • 需要一个二维数组来保存每个变得权值,有则填入具体数值,没有则用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

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

  1. 20172306 2018-2019-2 《Java程序设计与数据结构》第八周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第八周学习总结 教材学习内容总结 堆 堆是具有两个附加属性的一棵二叉树 它是一个完全树 对每一结点,它小于或等于其左 ...

  2. 20172306 2018-2019-2 《Java程序设计与数据结构》第七周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第七周学习总结 教材学习内容总结 概述 二叉查找树是一种含有附加属性的二叉树,即其左孩子小于父结点,而父结点又小于或 ...

  3. 20172306 2018-2019-2 《Java程序设计与数据结构》第六周学习总结

    20172306 2018-2019-2 <Java程序设计与数据结构>第六周学习总结 教材学习内容总结 概述(了解一下树的一些概念) 树是一种非线性结构.树由一个包含结点和边的集构成,其 ...

  4. 20lanmo162326 2017-2018-1 《程序设计与数据结构》第1周学习总结

    20162326 2017-2018-1 <程序设计与数据结构>第1周学习总结 教材学习内容总结 算法:在特定计算模型下,解决问题的指令序列 计算 = 信息处理 也就是用工具,遵规则,机械 ...

  5. “2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排

    “2017面向对象程序设计(Java)第十一周学习总结”存在问题的反馈及教学安排1.“提出表扬的同学:姜依萍,王雪玲,徐楠,相文君,赵晓未提交作业的同学:任红强,王瑞强,宗鹏新,扎西才让,布旦刀杰,范 ...

  6. 201871010106-丁宣元 《面向对象程序设计(java)》第十一周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  7. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

  8. 20172306《Java程序设计与数据结构》第十周学习总结

    20172306<Java程序设计>第十周学习总结 教材学习内容总结 本章主要的讲的是集合有关的知识: 1.集合与数据结构 - 集合是一种对象,集合表示一个专用于保存元素的对象,并该对象还 ...

  9. 20172306《Java程序设计与数据结构》第八周学习总结

    20172306<Java程序设计>第8周学习总结 教材学习内容总结 第十章最开始自己看的时候,没怎么看懂,等老师讲完之后,又看了一遍,就理解了很多.第十章主要学习了以下几点: 1.对于几 ...

随机推荐

  1. Linux/Unix系统编程手册 第二章:基本概念

    本章预热与后续系统编程有关的概念. 术语“操作系统”通常包含2种含义:一是指完整的软件包,包括管理计算机资源的核心组件,已经附带的标准软件:二是独指管理硬件的内核. 内核具有诸多概功能,包括: 进程管 ...

  2. vim加密文件

    一.加密文件内容 vim gt-1.sh 输入:X 注意是大写的X 输入密码 然后,保存 再次访问,需要输入密码 如果输入密码错误,内容显示为乱码 用cat或more查看文件内容,显示为乱码:用vi重 ...

  3. C# 调用WSDL接口及方法

    1.首先需要清楚WSDL的引用地址 如:http://XX.XX.4.146:8089/axis/services/getfileno?wsdl 上述地址的构造为 类名getfileno. 2.在.N ...

  4. No.7 selenium学习之路之Alert弹窗

    Alert弹窗 弹窗是用工具选不到的~ 切换到alert driver.switch_to_alert() 新的语法:driver.switch_to.alert 注:新的语法不需要后面加括号 打印a ...

  5. Python学习1-Python和Pycharm的下载与安装

    本文主要介绍Python的下载安装和Python编辑器Pycharm的下载与安装. 一.Python的下载与安装 1.下载 到Python官网上下载Python的安装文件,进入网站后显示如下图: 网速 ...

  6. 以太坊go-ethereum常见问题汇总

    (1)什么是 Ethereum? 以太坊是一个分散的智能合同平台,由Ether的加密货币提供支持. (2) 听说过以太坊,但什么是Geth,Mist,Ethminer,Mix? Geth: 以太坊节点 ...

  7. SQL Server和Access数据读写

    1.查询Access中数据的方法: select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:/db2.mdb','select ...

  8. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  9. 【TensorFlow】一文弄懂CNN中的padding参数

    在深度学习的图像识别领域中,我们经常使用卷积神经网络CNN来对图像进行特征提取,当我们使用TensorFlow搭建自己的CNN时,一般会使用TensorFlow中的卷积函数和池化函数来对图像进行卷积和 ...

  10. 利用Octopress在github pages上搭建个人博客

    利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境.git环境等.本人在Fed ...