邻接矩阵实现

例图

分析

变量

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

最新文章

  1. dicom网络通讯入门(1)
  2. BZOJ 4066 简单题 ——KD-Tree套替罪羊树
  3. CentOS_7.2服务器前期
  4. js post提交
  5. mybatis读取配置文件报错:Could not find resource configuration.xml
  6. Spark MLib 基本统计汇总 1
  7. K米测评
  8. DataTableToExcel
  9. MFC CString的L和_T
  10. Android学习笔记⑥——UI组件的学习ImageView相关
  11. Linux之父访谈录:设计内核只为了好玩
  12. C语言入门(6)——C语言常用数学函数
  13. DB Error: 1 &amp;quot;unrecognized token: &amp;quot;:&amp;quot;&amp;quot;
  14. Windows系统服务的编写。
  15. 应届毕业生如何通过学习Linux系统选择一份高薪职业
  16. LeetCode &amp; Q28-Implement strStr-Easy
  17. 爬虫框架之Scrapy(一)
  18. 《剑指offer》字符串的排列
  19. MIUI6系统如何启用root权限的教程
  20. 1.1python解决数学建模之席位分配问题

热门文章

  1. 【codeforces】【比赛题解】#864 CF Round #436 (Div.2)
  2. Linux USB驱动框架分析(2)【转】
  3. ClientDataset 三层 var and out arguments must match parameter
  4. Webmin试玩
  5. python基础--shutil模块
  6. python网络编程-socket样例
  7. java 多线程总结篇4——锁机制
  8. SQL行列转换的另一种方法
  9. ZCTF2015 pwn试题分析
  10. 将DataTable转换为List,将List转换为DataTable的实现类