当前位置: 首页 > news >正文

数据结构:邻接矩阵与邻接表

模型图

邻接矩阵

用于反应图中任意两点之间的关联,用二维数组表示比较方便

以行坐标为起点,列坐标为终点如果两个点之间有边,那么标记为绿色,如图:

适合表示稠密矩阵  

 

邻接表

用一维数组 + 链表的形式表示,以数组下标作为起点,链表中的每个节点作为终点形成的邻接表, 如图:

                                                         适合表示稀疏矩阵

 

Java代码实现
邻接矩阵

 

public class AdjacentMatrix {private static Scanner scanner=new Scanner(System.in);  //扫描器public static void main(String[] args) {System.out.println("------图转换为邻接矩阵------");System.out.println("请输入顶点的数量:");int vertex_count= scanner.nextInt();//开辟邻接矩阵boolean[][]adjacentMatrix=new boolean[vertex_count][vertex_count];//初始化矩阵for(int start=0;start<vertex_count;start++){for(int end=0;end<vertex_count;end++){adjacentMatrix[start][end]=false;}}//获取边System.out.println("请输入边的数量:");int edge_count=scanner.nextInt();System.out.println("请输入这些边的起点和终点,如(start end):");for(int i=0;i<edge_count;i++){int start= scanner.nextInt();int end= scanner.nextInt();//填充边adjacentMatrix[start][end]=true;}//打印输入结果System.out.println("所有边如下:");for (int start=0;start<vertex_count;start++){for(int end=0;end<vertex_count;end++){if(adjacentMatrix[start][end]==true)System.out.println(start+"->"+end);}}}
}
测试
//输入:
------图转换为邻接矩阵------
请输入顶点的数量:
4
请输入边的数量:
5
请输入这些边的起点和终点,如(start end):
2 0
2 1
3 0
3 1
0 1//输出:    
所有边如下:
0->1
2->0
2->1
3->0
3->1进程已结束,退出代码为 0
 邻接表
public class AdjacentList {private static class Edge{public Integer endId;public Edge nextEdge;public Edge(Integer endId) {this.endId = endId;this.nextEdge=null;}public Edge(Integer endId, Edge nextEdge) {this.endId = endId;this.nextEdge = nextEdge;}}private static Scanner scanner=new Scanner(System.in);public static void main(String[] args) {System.out.println("----------图转换为邻接表----------");System.out.println("请输入顶点的数量:");int vertex_count= scanner.nextInt();Edge[]adjacentList=new Edge[vertex_count];System.out.println("请输入边的数量:");int edge_count= scanner.nextInt();System.out.println("请输入这些边:");for(int i=0;i<edge_count;i++){int start= scanner.nextInt();int end= scanner.nextInt();if(adjacentList[start]==null)adjacentList[start]=new Edge(end);elseadjacentList[start].nextEdge=new Edge(end,adjacentList[start].nextEdge);}System.out.println("邻接表如下:");for (int i = 0; i < adjacentList.length; i++){System.out.print("start:"+i+" end:");for(Edge e=adjacentList[i];e!=null;e=e.nextEdge){System.out.print("->"+e.endId);}System.out.println();}}
}
测试

 

//输入:
----------图转换为邻接表----------
请输入顶点的数量:
4
请输入边的数量:
5
请输入这些边:
2 0
2 1
3 0
3 1
0 1//输出:    
邻接表如下:
start:0 end:->1
start:1 end:
start:2 end:->0->1
start:3 end:->0->1进程已结束,退出代码为 0

http://www.lryc.cn/news/218380.html

相关文章:

  • python PyQt5 MySQL GUI 学生信息管理系统
  • [SSD综述1.6] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
  • 【计算机网络 - 自顶向下方法】第一章习题答案
  • 零基础搭建Nextcloud私有云盘并通过内网穿透实现远程访问
  • element ui多选框编辑时无法选中的解决办法
  • Android Studio布局
  • 2.10 CSS BFC
  • iSlide2024一款基于PPT的插件工具包含38个设计辅助功能
  • ATE新能源汽车充电桩自动负载测试系统
  • 机器学习笔记 - 感知器的数学表达
  • JavaScript 自定义对象
  • UNI-APP_ios自动适应底部安全区背景,修改安全区背景
  • 微服务的定义
  • 什么是C语言中的异常和错误处理机制?
  • 某某盾-滑块验证-自动获取validate值-(逆向js+python)
  • C++:set和map的使用
  • 同城售后系统退款业务重构心得 | 京东云技术团队
  • 【计算机网络笔记】TCP连接管理(图解三次握手和四次挥手)
  • C++ 初阶 类和对象(中)
  • 【漏洞复现】Metinfo5.0.4任意文件包含漏洞复现
  • 【计算机网络实验/wireshark】tcp建立和释放
  • STM32:I²C通信原理概要
  • 【开题报告】基于 Spring Boot 的在线预约导游系统的设计与实现
  • 如何使用ps制作ico图标文件
  • 【Linux】logrotate实现“日志文件定时分割“
  • Android可绘制资源概览(背景、图形等)
  • 力扣2095.删除链表的中间节点(java快慢指针)
  • 【Vue-Element-Admin】table添加自定义索引
  • 0008Java安卓程序设计-ssm基于Android平台的健康管理系统
  • Mac 禁用一些高占用cup的进程