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

邻接矩阵实现

例图

分析

变量

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

时间: 2024-11-09 07:22:29

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

学号20172328《程序设计与数据结构》第十一周学习总结

学号20172328<程序设计与数据结构>第十一周学习总结 教材学习内容总结 (Java和Anroid开发学习指导) 1.初识Anroid studio中的应用程序结构:Project窗口中有两个主要的节点,app和Gradle Scripts. app :包含应用程序中所有的组件,有三个节点 manifests.java.res. manifests:包含了一个AndroidManifests.xml文件,它描述了应用程序. java:包含了所有的Java应用程序和测试类. res:包含了资

20162327 《程序设计与数据结构》第十一周学习总结

20162327 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 1.在无向图中,表示边的顶点对是无序的 2.如果图中的两个顶点之间有边连接,则称它们是邻接的 3.如果无向图中的连接顶点的边数达到最大,则图为完全图 4.路径是图中连接顶点的边的序列 5.有向图中,边是顶点的有序对 6.有向图中的路径是连接两个顶点的有向边的序列 7.图的每条边上都有对应的权值的图称为带权图 8.图的深度优先遍历与广度优先遍历的主要差异在于栈代替队列来管理遍历过程 9.当且仅当从

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

20162304 2017-2018-1 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 定义哈希方法: 哈希函数的学习: 哈希表中的冲突问题: Java Collections API 实现: 教材学习中的问题和解决过程 问题1:哈希表中的冲突如何解决? 冲突问题:冲突问题是多个元素或关键字映射到表中的同一个位置. 链式方法,将哈希表看成是集合的表而不是各独立单位的表.所以每个单元中保存一个指针,指向与表中该位置相关的元素的集合. 优点: 开放地址方法:(1)线性探测法:Threa

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

20172329 2017-2018-2 <程序设计与数据结构>第十一周学习总结 教材学习内容总结 Java和Android开发学习指南 第23章 Android简介 一.4种Android应用程序组件 1.活动 ( Activity ) : 包含用户交互组件的一个窗口 . 2.服务 ( Service ) : 在后台长时间运行的操作 . 3.广播接收者 (Broadcast receiver ) : -个监听器 , 负责对系统或应用程序声明做 出响应 . 4.内容提供者 ( Contentp

20172308《程序设计与数据结构》第十一周学习总结

20172308 2017-2018-2 <Java程序设计>第十周学习总结 教材学习内容总结 第 24 章 初识Android 1.应用程序结构: 两个节点 app: -manifests(包含AndroidManifest.xml文件,描述应用程序) -java(包含所有的Java应用程序和测试类) -res(包含资源文件) Gradle Scripts:包含Gradle构件脚本 调试应用程序:Android.util.Log类用于记录日志消息,L可以将消息保存在一个文件中并过滤消息 2.

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

教材学习内容总结 Android简介 概览:android操作系统是一种多用户的Linux系统,每个应用程序作为单独的Linux进程中的一个不同的用户而运行.Android使用Java语言但是不在Java虚拟机上运行.如果想了解更多的内容,可以看看Android的构建过程 应用程序开发简介: 4种Android应用程序组件 (1) 活动(Activity):包含用户交互组件的一个窗口. (2) 服务(Service):在后台长时间运行的操作. (3) 广播接收者(Broadcast receiv

20172314 2017-2018-2 《程序设计与数据结构》第5周学习总结

20172314 2017-2018-2 <程序设计与数据结构>第5周学习总结 教材学习内容总结 布尔表达式:相等性运算符:"==","!="分别表示"相等"与"不相等". 关系运算符:"<", ">", "<=", ">="分别表示"小于", "大于","小于等

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

20172313 2017-2018-2 <程序设计与数据结构>第六周学习总结 教材学习内容总结 学习了如何声明和使用一个数组. 学习了要进行边界检查,确保只因用数组有效范围之内的索引值. 学习了数组不同的声明方式和初始化方式. 学习了当数组保存对象时的使用. 初步学习了命令行实参的使用. 学习了如何在调用方法时怎样接受任意个数的参数. 初步学习了二维数组的使用 教材学习中的问题和解决过程 问题1:书上在介绍数组的概念时,说数组的索引值从0开始而不是从1开始能够使元素地址的计算更为简单. 问题

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

20172313 2017-2018-2 <程序设计与数据结构>第八周学习总结 教材学习内容总结 了解了在多态引用时的后绑定的概念. 学习练习如何利用继承方式来实现多态性. 学习练习如何利用接口来实现多态性. 初步学习算法,了解学习了两种对数组中的元素进行排序的方法. 了解学习了两种在一组元素中寻找一个指定的目标元素的方法. 初步学习判断何时使用多态性设计对问题进行解决,并体会利用多态性所带来的好处. 教材学习中的问题和解决过程 问题1:在刚刚开始学习利用接口实现多态性的时候感觉很奇怪,因为在