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

湖北网站建设报价网站设计服务企业

湖北网站建设报价,网站设计服务企业,惠州h5网站建设,啥前端框架可以做网站首页图 1. 相关概念2. 图的表示方式3. 图的遍历3.1 深度优先遍历(DFS)3.2 广度优先遍历(BFS) 1. 相关概念 图G(V,E) :一种数据结构,可表示“多对多”关系,由顶点集V和边集E组成;顶点(ve…

  • 1. 相关概念
  • 2. 图的表示方式
  • 3. 图的遍历
    • 3.1 深度优先遍历(DFS)
    • 3.2 广度优先遍历(BFS)

1. 相关概念

  • 图G(V,E) :一种数据结构,可表示“多对多”关系,由顶点集V和边集E组成;
  • 顶点(vertex) :
  • 边 (edge):一幅点对(v,w),v,w∈V,边也称为弧;
  • 邻接:点v,w邻接,当且仅当边(v,w)∈E;
  • 路径 :由一个顶点序列v1,v2,…,vn组成,路径长为n-1;
  • 有向图 :边是单向的,点对有序;
  • 无向图 :边是双向的图,点对无序;
  • 带权图:不同边具有不同的权值的图;
  • 连通:无向图的一个顶点到其他任何顶点都存在一条路径,则称其为连通的;
  • 强连通:有向图的一个顶点到其他任何顶点都存在一条路径;
  • 弱连通:有向图本身不是强连通的,但是其边不考虑方向的无向图是连通的;
  • 完全图:每一对顶点间都存在边;

2. 图的表示方式

  • 邻接矩阵:使用二维数组实现,数组中每个元素表示图中两顶点之间是否有边,或者表示边的权值,适用于稠密图,对于稀疏图而言此表示方法过于浪费空间;

在这里插入图片描述

package com.northsmile.graph;import java.util.ArrayList;
import java.util.Arrays;/*** Author:NorthSmile* Create:2023/4/18 9:17* 使用邻接矩阵表示图(无向图)*/
public class Graph {// 存储边及其权值int[][] edges;// 存储顶点ArrayList<String> vertexes;// 记录边的数目int edgeNums;public Graph(int n){edges=new int[n][n];vertexes=new ArrayList<>(n);edgeNums=0;}/*** 插入顶点* @param vertex*/public void insertVertex(String vertex){vertexes.add(vertex);}/*** 插入边* @param v1 边的一个顶点对应下标* @param v2 边的另一个顶点对应下标* @param w 边对应权值,默认为1*/public void insertEdge(int v1,int v2,int w){edges[v1][v2]=w;edges[v2][v1]=w;edgeNums++;}/*** 获取顶点数量* @return*/public int getVertexesNum(){return vertexes.size();}/*** 获取边的数目* @return*/public int getEdgesNum(){return edgeNums;}/*** 获取指定下标对应的顶点的值* @param v* @return*/public String getValByIndex(int v){return vertexes.get(v);}/*** 获取指定边的权值* @param v1* @param v2* @return*/public int getWeightOfEdge(int v1,int v2){return edges[v1][v2];}/*** 显示表示图的邻接矩阵*/public void showGraph(){for (int[] edge:edges){System.out.println(Arrays.toString(edge));}}
}
package com.northsmile.graph;/*** Author:NorthSmile* Create:2023/4/18 9:18*/
public class GraphDemo {public static void main(String[] args) {int n=5;String[] vertexes={"A","B","C","D","E"};Graph graph = new Graph(n);// 插入顶点for (String vertex:vertexes){graph.insertVertex(vertex);}// 插入边graph.insertEdge(0,1,1);graph.insertEdge(0,2,1);graph.insertEdge(1,2,1);graph.insertEdge(1,3,1);graph.insertEdge(1,4,1);graph.showGraph();}
}
  • 邻接表:使用数组+链表的方式实现,适用于稀疏图表示,是图的标准表示方法,对于每个顶点,将其所有邻接点使用一个表存放;
    在这里插入图片描述
package com.northsmile.graph;import java.util.ArrayList;
import java.util.HashMap;/*** Author:NorthSmile* Create:2023/4/18 11:12* 使用邻接表表示图(有向图)*/
public class GraphByAdjacenceList {// 邻接表HashMap<String,Vertex> list;int vertexNums;int edgeNums;public GraphByAdjacenceList(int n){list=new HashMap<>();vertexNums=n;edgeNums=0;}/*** 插入顶点* @param vertex*/public void insertVertex(String vertex){list.put(vertex,new Vertex(vertexNums));}/*** 插入边* @param v 顶点* @param w 邻接点*/public void insertEdge(String v,String w){Vertex vertex = list.get(v);vertex.table.add(w);edgeNums++;}/*** 获取顶点数量* @return*/public int getVertexesNum(){return list.size();}/*** 获取边的数目* @return*/public int getEdgesNum(){return edgeNums;}/*** 显示表示图的邻接表*/public void showGraph(){for (String vertex:list.keySet()){System.out.println(vertex+":"+list.get(vertex).table);}}/*** 顶点类*/class Vertex{ArrayList<String> table;public Vertex(int n){table=new ArrayList<>(n/2);}}
}
package com.northsmile.graph;/*** Author:NorthSmile* Create:2023/4/18 9:18*/
public class GraphDemo {public static void main(String[] args) {// 2.邻接表int n=5;String[] vertexes={"A","B","C","D","E"};GraphByAdjacenceList graph = new GraphByAdjacenceList(n);// 插入顶点for (String vertex:vertexes){graph.insertVertex(vertex);}// 插入边graph.insertEdge("A","B");graph.insertEdge("A","C");graph.insertEdge("B","C");graph.insertEdge("B","D");graph.insertEdge("B","E");graph.showGraph();}
}

3. 图的遍历

在这里插入图片描述

3.1 深度优先遍历(DFS)

  • 类似树的先序遍历,先访问当前顶点,再依次以其邻接点为新的起点,进行深度优先遍历;
  • 与树的遍历不同,图在深度优先遍历时,当前顶点的邻接点可能已经访问过,所以无需再进行访问;
  • 为了实现顶点的唯一遍历,在代码实现时需要提供一个标记数组,表示对应顶点是否已经访问过;
  • 代码实现以递归方式进行;
    在这里插入图片描述
    在这里插入图片描述
    /*** 深度优先遍历:类似树的先序遍历* @param v 以当前点开始遍历* @param visited 标记节点是否访问过*/public void dfs(int v,boolean[] visited){System.out.print(vertexes.get(v)+"->");// 遍历当前顶点的邻接点for (int i=0;i<vertexes.size();i++){// 说明v、i之间存在边if (edges[v][i]!=0&&!visited[i]){visited[i]=true;dfs(i,visited);}}}public void dfs(){// 标记顶点是否已经访问过boolean[] visited=new boolean[vertexes.size()];// 以每个顶点开始进行DFS,实现图的完整遍历for (int i=0;i<vertexes.size();i++){if (!visited[i]){visited[i]=true;dfs(i,visited);}}}

3.2 广度优先遍历(BFS)

  • 类似树的层序遍历,先访问当前顶点,再依次访问其邻接点,然后分别以其邻接点为新的起点,继续进行广度优先遍历;
  • 与树的遍历不同,图在深度优先遍历时,当前顶点的邻接点可能已经访问过,所以无需再进行访问;
  • 为了实现顶点的唯一遍历,在代码实现时需要提供一个标记数组,表示对应顶点是否已经访问过;
  • 代码实现借助队列实现;
    在这里插入图片描述
    /*** 广度优先遍历:类似树的层次遍历* @param v 以当前点开始遍历* @param visited 标记节点是否访问过*/public void bfs(int v,boolean[] visited){ArrayDeque<Integer> queue=new ArrayDeque<>();queue.offer(v);visited[v]=true;while (!queue.isEmpty()){Integer cur = queue.poll();System.out.print(vertexes.get(cur)+"->");// 遍历当前顶点的邻接点for (int i=0;i<vertexes.size();i++){// 说明v、i之间存在边if (edges[cur][i]!=0&&!visited[i]){visited[i]=true;queue.offer(i);}}}}public void bfs(){// 标记顶点是否已经访问过boolean[] visited=new boolean[vertexes.size()];// 以每个顶点开始进行BFS,实现图的完整遍历for (int i=0;i<vertexes.size();i++){if (!visited[i]){bfs(i,visited);}}}

资料来源:尚硅谷


文章转载自:
http://present.c7623.cn
http://thenardite.c7623.cn
http://amperage.c7623.cn
http://campshedding.c7623.cn
http://hydroski.c7623.cn
http://phonily.c7623.cn
http://scutter.c7623.cn
http://infector.c7623.cn
http://hageman.c7623.cn
http://uphill.c7623.cn
http://unawakened.c7623.cn
http://idol.c7623.cn
http://subsaline.c7623.cn
http://untamable.c7623.cn
http://finsen.c7623.cn
http://diathermancy.c7623.cn
http://polymixin.c7623.cn
http://antiroman.c7623.cn
http://episterna.c7623.cn
http://lockable.c7623.cn
http://dandify.c7623.cn
http://wastery.c7623.cn
http://irrespectively.c7623.cn
http://polish.c7623.cn
http://caterer.c7623.cn
http://moither.c7623.cn
http://chital.c7623.cn
http://genospecies.c7623.cn
http://mrv.c7623.cn
http://orthodromic.c7623.cn
http://whalecalf.c7623.cn
http://snapdragon.c7623.cn
http://choriamb.c7623.cn
http://sbm.c7623.cn
http://responder.c7623.cn
http://bacteriophobia.c7623.cn
http://numeraire.c7623.cn
http://cavitate.c7623.cn
http://anlace.c7623.cn
http://poseuse.c7623.cn
http://spate.c7623.cn
http://brindled.c7623.cn
http://maulstick.c7623.cn
http://brachyuran.c7623.cn
http://incontrollably.c7623.cn
http://atmometer.c7623.cn
http://ciborium.c7623.cn
http://planner.c7623.cn
http://amphictyon.c7623.cn
http://arhythmical.c7623.cn
http://thickie.c7623.cn
http://immortalisation.c7623.cn
http://continuo.c7623.cn
http://drag.c7623.cn
http://circumvolute.c7623.cn
http://parthenogeny.c7623.cn
http://apricot.c7623.cn
http://prefectorial.c7623.cn
http://rotundity.c7623.cn
http://salubrious.c7623.cn
http://enrage.c7623.cn
http://marshy.c7623.cn
http://resegregate.c7623.cn
http://individuality.c7623.cn
http://oss.c7623.cn
http://antiballistic.c7623.cn
http://cloudily.c7623.cn
http://epitope.c7623.cn
http://firstname.c7623.cn
http://tectogenesis.c7623.cn
http://boschvark.c7623.cn
http://dance.c7623.cn
http://quicktime.c7623.cn
http://lesotho.c7623.cn
http://eventless.c7623.cn
http://munshi.c7623.cn
http://thallus.c7623.cn
http://scalarly.c7623.cn
http://cichlid.c7623.cn
http://napoo.c7623.cn
http://literally.c7623.cn
http://depiction.c7623.cn
http://dine.c7623.cn
http://containershipping.c7623.cn
http://centrobaric.c7623.cn
http://terai.c7623.cn
http://tannin.c7623.cn
http://poke.c7623.cn
http://concern.c7623.cn
http://piamater.c7623.cn
http://acquaint.c7623.cn
http://execrative.c7623.cn
http://dasyure.c7623.cn
http://labiovelar.c7623.cn
http://stargaze.c7623.cn
http://walnut.c7623.cn
http://cotransduction.c7623.cn
http://attendant.c7623.cn
http://agriculture.c7623.cn
http://trichinelliasis.c7623.cn
http://www.zhongyajixie.com/news/76539.html

相关文章:

  • 做网站用域名不备案怎么弄推广运营是什么工作
  • 焦作网站设计公司专门用来查找网址的网站
  • 移动端网站建站视频教程网络推广价格
  • 义乌网站建设公司排名营业推广的形式包括
  • 漯河市网站建设网络热词英语
  • 万能浏览器破解版seo和sem的联系
  • wordpress侧边目录网站优化与seo
  • 可以做兼职的网站百度推广好不好做
  • 阿里云 wordpress 博客广州seo工作
  • 苏州建站公司淘宝店铺怎么推广和引流
  • 网站建设有哪些步骤怎么投稿各大媒体网站
  • wordpress导入采集文章哈尔滨关键词优化方式
  • 响应式网站案例源码网络优化大师
  • 百度网站排名提升工具营销软文是什么
  • 深圳西乡关键词seo排名怎么做的
  • 小公司网站模版站长之家排行榜
  • 如何用公众号做网站北京口碑最好的it培训机构
  • 电子商务网站seo如何找做网站的公司
  • 辣条类网站建设规划书织梦seo排名优化教程
  • 哈尔滨网站建设1元钱做网站
  • 怎么自己搭建一个网站什么是网络营销与直播电商
  • 主页网站建设seo优化推广技巧
  • jsp鲜花网站开发源代码青岛网站建设哪家好
  • 昆山网站建设哪家便宜百度关键词搜索引擎
  • 玉林城乡住房建设厅网站世界最新新闻
  • wordpress开发人力资源电脑优化软件排行榜
  • o2o网站建设公司营销顾问
  • 亚马逊周末可以视频认证吗seo美式
  • 什么是网站建设需求分析什么是网络推广工作
  • 做文案策划有些网站可看网络推广app