博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 图的邻接矩阵
阅读量:5337 次
发布时间:2019-06-15

本文共 2372 字,大约阅读时间需要 7 分钟。

有向图 在有向图中,结点对<x ,y>是有序的,结点对<x,y>称为从结点x到结点y的一条有向边,因此,<x,y>与<y,x>是两条不同的边。有向图中的结点对<x,y>用一对尖括号括起来,x是有向边的始点,y是有向边的终点,有向图中的边也称作弧。

无向图 在无向图中,结点对(x,y)是无序的,结点对(x,y)称为与结点x和结点y相关联的一条边。(x,y)等价于<x,y>和<y,x>。

完全图 在有n个结点的无向图中,若有n(n-1)/2条边,即任意两个结点之间有且只有一条边,则称此图为无向完全图。在有n个结点的有向图中,若有n(n-1)条边,即任意两个结点之间有且只有方向相反的两条边,则称此图为有向完全图。

邻接结点 在无向图G中,若(u,v)是E(G)中的一条边,则称u和v互为邻接结点,并称边(u,v)依附于结点u和v。在有向图G中,若<u,v>是E(G)中的一条边,则称结点u邻接到结点v,结点v邻接自结点u,并称边<u,v>和结点u和结点v相关联。

结点的度 结点v的度是与它相关联的边的条数,记作TD(v)。
路径 在图G=(V,E)中,若从结点vi出发有一组边使可到达结点vj,则称结点vi到结点vj的结点序列为从结点vi到结点vj的路径。

权 有些图的边附带有数据信息,这些附带的数据信息称为权。第i条边的权用符号wi表示。
路径长度 对于不带权的图,一条路径的路径长度是指该路径上的边的条数;对于带权的图,一条路径的路径长度是指该路径上各个边权值的总和。

最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图联通的最少的边。(n-1)条边。

图的邻接矩阵存储结构
假设图G=(V,E)有n个结点,即V={v0,v1,…,vn-1},E可用如下形式的矩阵A描述,对于A中的每一个元素aij,满足:aij=1表示i和j节点有边相连,aij=0表示i和j没有边相连。
由于矩阵A中的元素aij表示了结点vi和结点vj之间边的关系,或者说,A中的元素aij表示了结点vi和结点vj(0≤j≤n-1)的邻接关系,所以矩阵A称作邻接矩阵。 aij=多少的数表示i和j的路径权值。

 

 

 

import java.util.ArrayList;//邻接矩阵类public class MyAdjGraphic {    static final int maxWeight=-1; //如果两个结点之间没有边,权值为-1;    ArrayList vertices = new ArrayList();//存放结点的集合    int[][] edges; //邻接矩阵的二维数组    int numOfEdges; //边的数量        public MyAdjGraphic(int n)    {        edges = new int[n][n];        for(int i=0;i
= vertices.size())||(v2 < 0||v2 >= vertices.size())) { throw new Exception("v1或者v2参数越界错误!"); } return this.edges[v1][v2]; } //插入结点 public void insertVertice(Object obj) { this.vertices.add(obj); } //插入带权值的边 public void insertEdges(int v1,int v2,int weight) throws Exception { if((v1 < 0 || v1 >= vertices.size())||(v2 < 0||v2 >= vertices.size())) { throw new Exception("v1或者v2参数越界错误!"); } this.edges[v1][v2]=weight; this.numOfEdges++; } //删除某条边 public void deleteEdges(int v1,int v2) throws Exception { if((v1 < 0 || v1 >= vertices.size())||(v2 < 0||v2 >= vertices.size())) { throw new Exception("v1或者v2参数越界错误!"); } if( v1==v2 || this.edges[v1][v2]==maxWeight)//自己到自己的边或者边不存在则不用删除。 { throw new Exception("边不存在!"); } this.edges[v1][v2]=maxWeight; this.numOfEdges--; } //打印邻接矩阵 public void print() { for(int i=0;i

 

转载于:https://www.cnblogs.com/yaowen/p/4269409.html

你可能感兴趣的文章
无线通信基础(一):无线网络演进
查看>>
如何在工作中快速成长?阿里资深架构师给工程师的10个简单技巧
查看>>
WebSocket 时时双向数据,前后端(聊天室)
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
安卓第十三天笔记-服务(Service)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Zookeeper一致性级别
查看>>
单例模式的几种实现方式及对比
查看>>
邓白氏编码 申请
查看>>
Linux远程登录
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
C#中结构体与字节流互相转换
查看>>
session和xsrf
查看>>
跟随大神实现简单的Vue框架
查看>>