1. // 深搜
  2. private void dfs(int v) {
  3. visited[v] = true;
  4. System.out.print(v+" ");
  5. for (int i = 0; i <G.get(v).size(); i++) {
  6. //递归调用搜索没有被访问过的当前节点的下一个节点(邻接点)
  7. int k=G.get(v).get(i);
  8. if (!visited[k])
  9. dfs(k);
  10. }
  11. }
  12. //广搜
  13. private void bfs(int v) {
  14. //队列用来保存被访问节点的分支节点(邻接点)
  15. Queue<Integer> que = new LinkedList<Integer>();
  16. que.offer(v);
  17. while (!que.isEmpty()) {
  18. v = que.poll();
  19. System.out.print(v+" ");
  20. visited[v] = true;
  21. //将被访问节点的分支节点(邻接点)加入到队列中
  22. for (int i = 0; i <G.get(v).size(); i++) {
  23. int k=G.get(v).get(i);
  24. if (!visited[k]){
  25. que.add(k);
  26. visited[k] = true;
  27. }
  28. }
  1. public class ALGraph implements IGraph{
  2.   //图的邻接表类的描述
  3. private GraphKind kind;
  4. private int vexNum,arcNum;
  5. private VNode[] vexs;
  6.  
  7. public void createGraph() {
  8. // TODO Auto-generated method stub
  9. Scanner sc = new Scanner(System.in);
  10. System.out.println("请输入图的类型");
  11. GraphKind kind =GraphKind.valueOf(sc.next());
  12. switch(kind)
  13. {
  14. case UDG:
  15. createUDG();
  16. break;
  17. case DG:
  18. createDG();
  19. break;
  20. case UDN:
  21. createUDN();
  22. break;
  23. case DN:
  24. createDN();
  25. break;
  26. }
  27. }
  28.  
  29. private void createDN() {
  30. // TODO Auto-generated method stub
  31. //创建有向网
  32. Scanner sc=new Scanner(System.in);
  33. System.out.println("下面要创建带权的有向图(有向网)。请分别输入图的顶点数、图的边数");
  34. vexNum=sc.nextInt();
  35. arcNum=sc.nextInt();
  36. vexs=new VNode[vexNum];
  37. System.out.println("请分别输入图的各顶点");
  38. for(int v=0;v<vexNum;v++)
  39. vexs[v]=new VNode(sc.next());
  40. System.out.println("请输入各边的顶点及其权值:");
  41. for(int k=0;k<arcNum;k++)
  42. {
  43. int v=locateVex(sc.next());//弧尾
  44. int u=locateVex(sc.next());//弧头
  45. int value=sc.nextInt();
  46. addArc(v,u,value);
  47. }
  48. for(VNode v:vexs)
  49. System.out.print(v.getData()+" ");
  50.  
  51. }
  52.  
  53. //在图中插入边(或弧)节点,图右顶点集合边集组成,因此创建图必须先建立图的顶点集合边集
  54. private void addArc(int v, int u, int value) {
  55. // TODO Auto-generated method stub
  56. ArcNode arc = new ArcNode(u,value);
  57. arc.setNextArc(vexs[v].getFirstArc());
  58. vexs[v].setFirstArc(arc);
  59.  
  60. }
  1. //图的邻接表表示中的顶点节点类
  2. public class VNode {
  3.  
  4. private Object data;// 顶点信息
  5. private ArcNode firstArc; //指向第一条依附于该顶点的弧
  6. }
  7.  
  8. //图的邻接表表示中 边结点 类
  9. public class ArcNode {
  10. private int adjVex;//该弧所指向的顶点位置
  11. private int value;//边或弧的权值
  12. private ArcNode nextArc;//指向下一条弧
  13. }

图的存储(Java)以及遍历的更多相关文章

  1. 【algo&ds】6.图及其存储结构、遍历

    1.什么是图 图表示"多对多"的关系 包含 一组顶点:通常用 V(Vertex)表示顶点集合 一组边:通常用 E(Edge)表示边的集合 边是顶点对:(v,w)∈ E,其中 v,w ...

  2. 图的存储,搜索,遍历,广度优先算法和深度优先算法,最小生成树-Java实现

    1)用邻接矩阵方式进行图的存储.如果一个图有n个节点,则可以用n*n的二维数组来存储图中的各个节点关系. 对上面图中各个节点分别编号,ABCDEF分别设置为012345.那么AB AC AD 关系可以 ...

  3. 图的存储及遍历 深度遍历和广度遍历 C++代码实现

    /*图的存储及遍历*/ #include<iostream> using namespace std; //----------------------------------- //邻接 ...

  4. Java基础知识强化之集合框架笔记39:Set集合之HashSet存储字符串并遍历

    1. HashSet类的概述: (1)不保证set的迭代顺序 (2)特别是它不保证该顺序恒久不变 HashSet底层数据结构是哈希表,哈希表依赖于哈希值存储,通过哈希值来确定元素的位置,  而保证元素 ...

  5. Java基础知识强化之集合框架笔记14:List集合存储字符串并遍历

    1. List集合存储学生对象并遍历: 需求:存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)添加字符串对象到集合中 (4)遍历集合 2. 代码示例: package cn. ...

  6. Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历

    1.  Collection集合存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)把字符串对象添加到集合中 (4)遍历集合 2. 代码示例: package cn.itcast ...

  7. C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)

    图的存储结构 1)邻接矩阵 用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息. 2)邻接表 3)十字链表 4)邻接多重表 5)边集数组 本文只用代码实现用 ...

  8. 【lhyaaa】图的存储&遍历

    呀,图真是一个令人头疼而又很重要的东西.在现实生活中,我们有很多的问题都不能用树来实现,所以烦人啊不伟大的图就出现了—— 图的存储 没有存储哪来的操作,所以存储是最基础的呢. 邻接矩阵 我们对于图的存 ...

  9. 图的存储与遍历C++实现

    1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...

  10. 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)

    邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...

随机推荐

  1. VulnHub-[DC-8-9]-系列通关手册

    DC8-通关手册 DC-8是另一个专门构建的易受攻击的实验室,目的是在渗透测试领域积累经验. 这个挑战有点复杂,既是实际挑战,又是关于在Linux上安装和配置的两因素身份验证是否可以阻止Linux服务 ...

  2. C++ new 运算符 用法总结

    C++ new 运算符 用法总结 使用 new 运算符 分配内存 并 初始化 1.分配内存初始化标量类型(如 int 或 double),在类型名后加初始值,并用小括号括起,C++11中也支持大括号. ...

  3. 手撸一个IOC容器

    IoC 什么是IoC? IoC是Inversion of Control(控制反转)的简称,注意它是一个技术思想.描述的是对象创建.管理的事情. 传统开发方式:比如类A依赖类B,往往会在类A里面new ...

  4. flask cache

    http://brunorocha.org/python/flask/using-flask-cache.html 如何在大项目中使用cache 新建全局cache.py cache = Cache( ...

  5. ECharts 点击事件

    一个问题 ECharts 点击出现多个弹窗

  6. Django 项目配置拆分独立

    目录 一.创建配置目录 二.创建基础配置文件 三.创建各个环境的配置 四.调整settings.py 五.程序使用 六.目录结构 Django 项目中,我们默认的配置是都在 settings.py 文 ...

  7. WebRTC打开本地摄像头

    本文使用WebRTC的功能,打开电脑上的摄像头,并且把摄像头预览到的图像显示出来. 纯网页实现,能支持除IE外的多数浏览器.手机浏览器也可用. 引入依赖 我们需要引入adapter-latest.js ...

  8. 【JavaSE】finally块不被执行的情况总结

    finally块不被执行的情况总结 2019-08-03  22:23:02  by冲冲 finally块的作用 通常用于处理善后工作.当try块里出现异常时,会立即跳出try块,到catch块匹配对 ...

  9. docker 启动报错:Docker.Core.Backend.BackendException: Error response from daemon: open \\.\pipe\docker_e

    win10 docker启动后报错: Docker.Core.Backend.BackendException:Error response from daemon: open \\.\pipe\do ...

  10. python网络自动化运维paramiko实验

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...