图的存储(Java)以及遍历
- // 深搜
- private void dfs(int v) {
- visited[v] = true;
- System.out.print(v+" ");
- for (int i = 0; i <G.get(v).size(); i++) {
- //递归调用搜索没有被访问过的当前节点的下一个节点(邻接点)
- int k=G.get(v).get(i);
- if (!visited[k])
- dfs(k);
- }
- }
- //广搜
- private void bfs(int v) {
- //队列用来保存被访问节点的分支节点(邻接点)
- Queue<Integer> que = new LinkedList<Integer>();
- que.offer(v);
- while (!que.isEmpty()) {
- v = que.poll();
- System.out.print(v+" ");
- visited[v] = true;
- //将被访问节点的分支节点(邻接点)加入到队列中
- for (int i = 0; i <G.get(v).size(); i++) {
- int k=G.get(v).get(i);
- if (!visited[k]){
- que.add(k);
- visited[k] = true;
- }
- }
- public class ALGraph implements IGraph{
- //图的邻接表类的描述
- private GraphKind kind;
- private int vexNum,arcNum;
- private VNode[] vexs;
- public void createGraph() {
- // TODO Auto-generated method stub
- Scanner sc = new Scanner(System.in);
- System.out.println("请输入图的类型");
- GraphKind kind =GraphKind.valueOf(sc.next());
- switch(kind)
- {
- case UDG:
- createUDG();
- break;
- case DG:
- createDG();
- break;
- case UDN:
- createUDN();
- break;
- case DN:
- createDN();
- break;
- }
- }
- private void createDN() {
- // TODO Auto-generated method stub
- //创建有向网
- Scanner sc=new Scanner(System.in);
- System.out.println("下面要创建带权的有向图(有向网)。请分别输入图的顶点数、图的边数");
- vexNum=sc.nextInt();
- arcNum=sc.nextInt();
- vexs=new VNode[vexNum];
- System.out.println("请分别输入图的各顶点");
- for(int v=0;v<vexNum;v++)
- vexs[v]=new VNode(sc.next());
- System.out.println("请输入各边的顶点及其权值:");
- for(int k=0;k<arcNum;k++)
- {
- int v=locateVex(sc.next());//弧尾
- int u=locateVex(sc.next());//弧头
- int value=sc.nextInt();
- addArc(v,u,value);
- }
- for(VNode v:vexs)
- System.out.print(v.getData()+" ");
- }
- //在图中插入边(或弧)节点,图右顶点集合边集组成,因此创建图必须先建立图的顶点集合边集
- private void addArc(int v, int u, int value) {
- // TODO Auto-generated method stub
- ArcNode arc = new ArcNode(u,value);
- arc.setNextArc(vexs[v].getFirstArc());
- vexs[v].setFirstArc(arc);
- }
- //图的邻接表表示中的顶点节点类
- public class VNode {
- private Object data;// 顶点信息
- private ArcNode firstArc; //指向第一条依附于该顶点的弧
- }
- //图的邻接表表示中 边结点 类
- public class ArcNode {
- private int adjVex;//该弧所指向的顶点位置
- private int value;//边或弧的权值
- private ArcNode nextArc;//指向下一条弧
- }
图的存储(Java)以及遍历的更多相关文章
- 【algo&ds】6.图及其存储结构、遍历
1.什么是图 图表示"多对多"的关系 包含 一组顶点:通常用 V(Vertex)表示顶点集合 一组边:通常用 E(Edge)表示边的集合 边是顶点对:(v,w)∈ E,其中 v,w ...
- 图的存储,搜索,遍历,广度优先算法和深度优先算法,最小生成树-Java实现
1)用邻接矩阵方式进行图的存储.如果一个图有n个节点,则可以用n*n的二维数组来存储图中的各个节点关系. 对上面图中各个节点分别编号,ABCDEF分别设置为012345.那么AB AC AD 关系可以 ...
- 图的存储及遍历 深度遍历和广度遍历 C++代码实现
/*图的存储及遍历*/ #include<iostream> using namespace std; //----------------------------------- //邻接 ...
- Java基础知识强化之集合框架笔记39:Set集合之HashSet存储字符串并遍历
1. HashSet类的概述: (1)不保证set的迭代顺序 (2)特别是它不保证该顺序恒久不变 HashSet底层数据结构是哈希表,哈希表依赖于哈希值存储,通过哈希值来确定元素的位置, 而保证元素 ...
- Java基础知识强化之集合框架笔记14:List集合存储字符串并遍历
1. List集合存储学生对象并遍历: 需求:存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)添加字符串对象到集合中 (4)遍历集合 2. 代码示例: package cn. ...
- Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历
1. Collection集合存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)把字符串对象添加到集合中 (4)遍历集合 2. 代码示例: package cn.itcast ...
- C++编程练习(9)----“图的存储结构以及图的遍历“(邻接矩阵、深度优先遍历、广度优先遍历)
图的存储结构 1)邻接矩阵 用两个数组来表示图,一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中边或弧的信息. 2)邻接表 3)十字链表 4)邻接多重表 5)边集数组 本文只用代码实现用 ...
- 【lhyaaa】图的存储&遍历
呀,图真是一个令人头疼而又很重要的东西.在现实生活中,我们有很多的问题都不能用树来实现,所以烦人啊不伟大的图就出现了—— 图的存储 没有存储哪来的操作,所以存储是最基础的呢. 邻接矩阵 我们对于图的存 ...
- 图的存储与遍历C++实现
1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...
- 数据结构作业——图的存储及遍历(邻接矩阵、邻接表+DFS递归、非递归+BFS)
邻接矩阵存图 /* * @Author: WZY * @School: HPU * @Date: 2018-11-02 18:35:27 * @Last Modified by: WZY * @Las ...
随机推荐
- VulnHub-[DC-8-9]-系列通关手册
DC8-通关手册 DC-8是另一个专门构建的易受攻击的实验室,目的是在渗透测试领域积累经验. 这个挑战有点复杂,既是实际挑战,又是关于在Linux上安装和配置的两因素身份验证是否可以阻止Linux服务 ...
- C++ new 运算符 用法总结
C++ new 运算符 用法总结 使用 new 运算符 分配内存 并 初始化 1.分配内存初始化标量类型(如 int 或 double),在类型名后加初始值,并用小括号括起,C++11中也支持大括号. ...
- 手撸一个IOC容器
IoC 什么是IoC? IoC是Inversion of Control(控制反转)的简称,注意它是一个技术思想.描述的是对象创建.管理的事情. 传统开发方式:比如类A依赖类B,往往会在类A里面new ...
- flask cache
http://brunorocha.org/python/flask/using-flask-cache.html 如何在大项目中使用cache 新建全局cache.py cache = Cache( ...
- ECharts 点击事件
一个问题 ECharts 点击出现多个弹窗
- Django 项目配置拆分独立
目录 一.创建配置目录 二.创建基础配置文件 三.创建各个环境的配置 四.调整settings.py 五.程序使用 六.目录结构 Django 项目中,我们默认的配置是都在 settings.py 文 ...
- WebRTC打开本地摄像头
本文使用WebRTC的功能,打开电脑上的摄像头,并且把摄像头预览到的图像显示出来. 纯网页实现,能支持除IE外的多数浏览器.手机浏览器也可用. 引入依赖 我们需要引入adapter-latest.js ...
- 【JavaSE】finally块不被执行的情况总结
finally块不被执行的情况总结 2019-08-03 22:23:02 by冲冲 finally块的作用 通常用于处理善后工作.当try块里出现异常时,会立即跳出try块,到catch块匹配对 ...
- 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 ...
- python网络自动化运维paramiko实验
运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...