Tree_Graph 有向图是否存在路径 @CareerCup

有向图中两个结点之间是否存在一条路径 给定有向图,设计一个算法,找出两个结点之间是否存在一条路径 public enum State { Unvisited,Visited,Visiting; } public  static boolean search(Graph g,Node start ,NLinkedList { //当作队列使用 LinkedList q=new LinkedList(); for 阅读详情

原文:

Given a directed graph, design an algorithm to find out whether there is a route between two nodes.

译文:

给定一个有向图,设计算法判断两结点间是否存在路径。


思路:

如果BFS就用队列

如果DFS就用递归回溯,参考回溯模板:http://blog.youkuaiyun.com/fightforyourdream/article/details/16997793



package Tree_Graph;

import java.util.LinkedList;

public class S4_2 {

	// ======================== State
	enum State{
		unvisited, visited, visiting;
	}
	
	// ======================== Node
	static class Node {
		private String vertex;
		private Node[] adjacent;
		public int adjacentCount;
		public State state;
		
		public Node(String vertex, int adjacentLength) {
			this.vertex = vertex;
			adjacentCount = 0;
			adjacent = new Node[adjacentLength];
		}
		
		public void addAdjacent(Node x) {
			if (adjacentCount < 30) {
				this.adjacent[adjacentCount++] = x;
			} else {
				System.out.println("No more adjacent can be added");
			}
		}
		
		public Node[] getAdjacent() {
			return adjacent;
		}
		
		public String getVertex() {
			return vertex;
		}
	}
	
	// ======================== Graph
	static class Graph {
		private Node[] vertices;
		public int count;
		
		public Graph() {
			vertices = new Node[6];
			count = 0;
		}
		
		public void addNode(Node x) {
			if (count < 30) {
				vertices[count] = x;
				count++;
			} else {
				System.out.println("Graph full");
			}
		}
		
		public Node[] getNodes() {
			return vertices;
		}
	}
	
	// ============================== BFS
	public static boolean bfs(Graph g, Node start, Node end) {
		LinkedList<Node> queue = new LinkedList<Node>();
		
		start.state = State.visiting;
		queue.add(start);
		while ( !queue.isEmpty() ) {
			Node cur = queue.remove();
			if (cur != null) {
				for (Node nbr : cur.getAdjacent()) {
					if (nbr.state == State.unvisited) {
						if (nbr == end) {
							return true;
						} else {
							nbr.state = State.visiting;
							queue.add(nbr);
						}
					}
				}
				cur.state = State.visited;
			}
		}
		return false;
	}
	
	// ================================= DFS
	public static boolean dfs(Graph g, Node start, Node end) {
		if ( start == end ) {
			return true;
		}
		
		for (Node nbr : start.getAdjacent()) {
			if (nbr.state == State.unvisited) {
				start.state = State.visiting;
				if(dfs(g, nbr, end)) {
					return true;
				}
				start.state = State.unvisited;
			}
		}
		return false;
	}
	
	
	
	public static Graph createNewGraph()
	{
		Graph g = new Graph();        
		Node[] temp = new Node[6];

		temp[0] = new Node("a", 3);
		temp[1] = new Node("b", 0);
		temp[2] = new Node("c", 0);
		temp[3] = new Node("d", 1);
		temp[4] = new Node("e", 1);
		temp[5] = new Node("f", 1);

		temp[0].addAdjacent(temp[1]);
		temp[0].addAdjacent(temp[2]);
		temp[0].addAdjacent(temp[3]);
		temp[3].addAdjacent(temp[4]);
		temp[4].addAdjacent(temp[5]);
		
		temp[5].addAdjacent(temp[0]);		// 添加一条边变成环
		
		for (int i = 0; i < 6; i++) {
			g.addNode(temp[i]);
		}
		resetState(g);
		return g;
	}
	
	public static void resetState(Graph g) {
		for (Node u : g.getNodes()) {
			u.state = State.unvisited;
		}
	}
	
	
	public static void main(String a[])
	{
		Graph g = createNewGraph();
		Node[] n = g.getNodes();
		Node start = n[4];
		Node end = n[3];
		resetState(g);
		System.out.println(bfs(g, start, end));
		resetState(g);
		System.out.println(dfs(g, start, end));
	}
	
	
}






假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路 假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。(注:图中不存在顶点到自己的弧) 立即下载

相关推荐

便携式水下动态实时视频色彩还原设备,一键快速实现对水下偏色视频和图像的色彩还原处理

便携式水下动态实时视频色彩还原,一键快速对水下图像进行色彩校正,清晰度提升和亮度均衡处理,为水下资源勘探和科学考古,海洋生态环境监测,水下机器作业等应用提供有力的协助

weixin_43518680的博客 633

无向图的深度优先遍历非递归_数据结构-图(图的基本实现C++)

​一、图的概念图是一种比较复杂的非线性数据结构图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。图区分有向图和无向图1、无向图(Undirected graphs)如果图中任意两个顶点之间的边都是无向边,则称该图为无向图。无向图相关概念:顶点、边图1-无向图2、有向图(Directed graphs...

weixin_39757743的博客 854

[FreeRTOS+STM32CubeMX] 03 USART串口调试-基于中断实现接收和发送数据

我们接着上一小节,上一节讲到,接收上位机传来的数据时,需要事先知道传来的数据的字节数,这一操作实在有些反人类,那么如何解决这个问题,上位机输入多少,我们就接收多少数据呢? 接下来我将把USART引入中断,在接收数据的回调函数中引入二值信号量、消息队列,来让我的接收数据能够存储在队列中,并一个一个的在任务中输出出来,并最终在上位机回显。

RichieHuang的博客 2649

Chapter 4 | Trees and Graphs--判断有向图两节点之间是否存在路径

4.2  Given a directed graph, design an algorithm to find out whether thereis a route between two nodes.

wenqian 'blog 8939

脆弱的冗余:链路聚合(LACP)中单条链路故障引发的网络震荡

show etherchannel summary# 查看聚合组中所有端口的标志位,健康状态应为 ‘P’ (Port-channel) 或 ‘SU’(Stand-up)。本次故障的核心教训是:网络系统对“部分故障”的容忍度和自愈能力,远比应对“完全故障”要重要和复杂得多。3.加强监控:部署网管系统,监控聚合端口的包错误计数、LACP状态变化频率,并设置阈值告警。标签: #链路聚合 #LACP故障 #网络冗余 #排障案例 #网络高可用性。修复链路:更换光模块、清洁光纤接口、检查物理线路。

danyth的博客 1983

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 914

判断有向图g中顶点i到顶点j是否有路径_有向图和有向无环图

1.术语和游戏规则有些问题中,顶点的连接是有方向的,这样的图成为有向图。n个顶点可能的有向图的数目要比无向图的数目大很多,所以有向图是更加复杂的。定义1:有向图(digraph,directed graph)由顶点集和连接有序顶点对的有向边集组成,我们说从一条边的其中一个顶点指向另一个顶点。定义2:在一个有向图中的有向路径(directed path)是顶点的一个序列,其中有一条有向边将序列中的每...

weixin_39736379的博客 1587

小波变换(深入浅出)

小波变换

weixin_46713695的博客 3万+

判断有向图g中顶点i到顶点j是否有路径_【算法学习】最短路径问题

最短路径问题大家好,这里是新来的工人~是一个没学过太多算法编程内容的rookie所以文章的问题也不难,欢迎小白们一起来看语言用的是C++,当然,算法部分比较重要希望第一篇文章能写好,让同为小白的读者读懂吧~话不多说,那就开始本期的内容吧目录01 问题介绍02 深度优先遍历03 Floyd算法04Dijkstra算法05 Bellman-Ford算法06SPFA算法07算法总结01问...

weixin_39634237的博客 1038

SPMI总线协议(一)

系统电源管理接口( System Power Management Interface简称SPMI)是一种双线串行接口,用于连接片上系统(SoC)处理器系统的集成电源控制器(PC)与一个或多个电源管理集成电路(PMIC)电压调节系统。SPMI 使系统能够使用单个 SPMI 总线动态调整 SoC 内部电压域的电源和衬底偏置电压。移动设备和其他便携式设计正日益采用系SPMI)协议,实现多主多从系统,根据实时系统需求监测和动态控制供电电压。设计人员可以在系统级实现更低的功率。

qflook的博客 884

[Dify实战] 合同审阅助手:识别风险条款、生成修改建议-带绑定资源

摘要: Dify合同审阅助手通过AI技术提升合同审阅效率,快速识别风险条款并输出结构化修改建议。方案包括合同输入、关键条款识别、风险评级和报告生成流程,重点关注付款、责任限制等核心条款。采用分层风险分级(高/中/低)和"红线清单"机制,确保审阅标准化。实施建议先建立条款库和模板,通过样本测试优化模型,定期更新规则库。该方案可缩短审阅时间50%以上,提高风险识别准确率,最终实现法务经验的可复用沉淀。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 597

Highcharts Treegraph实战:从层级关系可视化到交互优化完整指南

在数据可视化领域,层级关系图是一种将父子、从属等结构以树形方式直观呈现的核心技术,广泛应用于组织架构展示、知识图谱导航、决策树分析等场景。Treegraph树状图作为Highcharts图表库中的重要系列类型,通过节点与连线的自动布局,无需依赖坐标轴,只需基于id和parent字段即可构建清晰的可视化结构。它突破传统表格的缩进表达限制,让分支深度、并列关系一目了然,特别适合处理组织架构、谱系图、依赖关系等一元树结构数据。本文从数据可视化基础概念出发,系统讲解Highcharts Treegraph的环境搭建

weixin_35364187的博客 340

5步上手Quartz.NetUI:.NET Core定时任务的开箱即用解决方案

Quartz.NetUI是一个基于.NET Core + Quartz.NET + Vue + IView的开箱即用的定时任务UI解决方案。它结合了Quartz.NET的强大功能和Vue.js的易用性,提供了一个不依赖数据库、只需在界面进行简单配置即可使用的定时任务管理系统。通过上述步骤,你已经学会了如何使用Quartz.NetUI在.NET Core项目中实现定时任务。Quartz.NetUI不仅功能强大,而且使用简单,非常适合那些需要快速实现定时任务管理的开发者。

java专栏 2407

Tree_Graph 打印所有和为定值的路径 @CareerCup

原文: You are given a binary tree in which each node contains a value. Design an algorithm to print all paths which sum up to that value. Note that it can be any path in the tree - it does not have t

2020

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

TreeAndGraph(树和图)

1.实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个结点,其两棵子树的高度差不超过1。 class TreeNode { int data; TreeNode left; TreeNode right; public TreeNode(int value) { this.data = value...

weixin_30235225的博客 499

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

G6绘制树形图(自定义节点、自定义边、自定义布局)

G6绘制树形图(自定义节点、自定义边、自定义布局)

weixin_52268321的博客 9692

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

有向图路径存在判断

 import java.util.*; /* public class UndirectedGraphNode { int label = 0; UndirectedGraphNode left = null; UndirectedGraphNode right = null; ArrayList neighbors = new ArrayList();

lucyxu107的博客 1672

有向图两顶点间是否存在路径

1.     试基于图的深度优先搜索策略编写一程序,判别以邻接表方式存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i≠j)。   #include usingnamespacestd; constintN = 100; #include vectorint>data[N]; boolflag[N]; boolres= true; voiddfs(intstart,inte

秀 4202

查找有向图中两个顶点之间是否存在路径

查找有向图中两个顶点之间是否存在路径 给定一个有向图和其中的两个顶点,检查是否存在从第一个给定顶点到第二个顶点的路径。 Consider the following Graph: Input : (u, v) = (1, 3) Output: Yes Explanation: There is a path from 1 to 3, 1 -> 2 -> 3 Input : (u, v) = (3, 0) Output: No Explanation: There is no path

wat1r的博客 3985

【数据结构】判别以邻接表方式存储的有向图是否存在顶点Vi到Vj的路径

说明 分别采用了深度优先算法和广度优先算法实现 运行截图 代码实现: import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; /** * Created by IntelliJ IDEA * * @author manzuo * @date 2018/12/14 23:52 * 以邻...

man_zuo的博客 8527

【程序员面试宝典】检查有向图中两点是否存在路径相连

思路: 这个题目考察的其实是有向图的遍历,图的遍历分为深度优先遍历和广度优先遍历,深度优先遍历用堆栈实现,广度优先遍历用队列实现,在该题目中给出了每个节点的子节点,所以最好用广度优先遍历。 图的广度优先遍历和树的层次遍历类似,但是不是完全相同,因为图是连通的,所以我们必须去标志那个节点被访问过,那个节点没有被访问过,最后如果全部访问完以后,还没有找到a到b的路径,则返回false。 注意: (1)图中有环,记得标记是否被访问 (2)要分别检测两个方向(a->b,b->a) /* struct .

Currybeefer的博客 1386

判断有向图是否存在欧拉路径

欧拉路径:类似于一笔画,即可以不重复的走遍每一条边。 有向图存在欧拉路径的条件: 1.所有的点连通。 2. (1)所有的点出度等于入度 (2)一个点满足出度 = 入度 + 1, 一个点满足入度 = 出度 + 1, 其余点满足出度 = 入度。 代码实现: 条件1:用并查集检测连通点的数量是否等于所有节点数 条件2:在输入的时候记录每个节点的入度和出度 #include<bits/stdc++.h> using namespace std; const int N = 10

hello, coder~ 1559

判断有向图中两点之间是否存在路径

对于一个有向图,请实现一个算法,找出两点之间是否存在一条路径。给定图中的两个结点的指针UndirectedGraphNode*a,UndirectedGraphNode*b(请不要在意数据类型,图是有向图),请返回一个bool,代表两点之间是否存在一条路径(a到b或b到a)。 import java.util.*; /* public class UndirectedGraph...

weixin_30345055的博客 3796
上一篇: Tree_Graph 判断是否平衡二叉树 @CareerCup
下一篇: Tree_Graph 有序数组转BST @CareerCup
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值