用于反应图中任意两点之间的关联,用二维数组表示比较方便
以行坐标为起点,列坐标为终点如果两个点之间有边,那么标记为绿色,如图:
适合表示稠密矩阵
用一维数组 + 链表的形式表示,以数组下标作为起点,链表中的每个节点作为终点形成的邻接表, 如图:
适合表示稀疏矩阵
- 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
- {
- for(int end=0;end
- {
- adjacentMatrix[start][end]=false;
- }
- }
- //获取边
- System.out.println("请输入边的数量:");
- int edge_count=scanner.nextInt();
-
- System.out.println("请输入这些边的起点和终点,如(start end):");
- for(int i=0;i
- {
- int start= scanner.nextInt();
- int end= scanner.nextInt();
- //填充边
- adjacentMatrix[start][end]=true;
- }
-
- //打印输入结果
- System.out.println("所有边如下:");
- for (int start=0;start
- {
- for(int end=0;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
- {
- int start= scanner.nextInt();
- int end= scanner.nextInt();
- if(adjacentList[start]==null)
- adjacentList[start]=new Edge(end);
- else
- adjacentList[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
-
相关阅读:
canvas绘制扫描图
41.企业实战项目rsync + inotify + shell脚本 实现实时同步
Pytorch基础:Tensor的reshape方法
【设计模式】Java设计模式 - 适配器模式
java基础:基础语法
Redis从理论到实战:用Redis解决缓存穿透、缓存击穿问题(提供解决方案)
vue3 setup语法糖
UE5 UE4 快速定位节点位置
理论第十一课——字符串
Ubuntu下解压文件(提取文件总是报错)文件是zip 格式
-
原文地址:https://blog.csdn.net/weixin_74261199/article/details/134198168