DFS寻找从s到t的所有路径

news/2024/7/15 19:16:41 标签: 深度优先, 算法, 图论

问题描述:

输入一个有向图,输出从s到t的所有路径的结点

输入:
3 3
0 1
1 2
0 2
输出:

0 1 2

0  2

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 103;
vector<int>e[N];//用行为N的,列为可变长度的二维数组表示邻接表 
bool vis[N];//定义访问标记数组 
int path[N],cnt;//path用于记录路径,cnt用于记录路径长度(cnt初值为0,全局变量默认为0)
int n,m;//n为结点数,m为边数 

void dfs(int s,int t){//找到从s到t的所有路径
	vis[s] = 1;//第一件事永远都是把当前结点置为已访问
	path[cnt++] = s;//把当前结点加入路径中 
	if(s==t){//如果找到一条从s到t的路径
		for(int i=0;i<cnt;++i){
			printf("%d ",path[i]);//打印路径
		}
		printf("\n");
		vis[s] = 0;//回溯操作,如果不回溯,则结果只能找到一条从s到t的路径 
		cnt--;//回溯 
		return;
	}
	for(int i=0;i<e[s].size();++i){//如果当前还没找到s到t路径,继续访问当前s的下一个邻接点   e.[s].size表示,当前结点s的邻接点的个数 
		if(!vis[e[s][i]]){//如果第s行,第i个结点没有被访问过,则继续访问 
			dfs(e[s][i],t);//继续从当前扫描到的结点出发去寻找到t的路径 
		}
	}
	vis[s]=0;//回溯,如果没有找到路径,也要回溯,因为如果访问过s之后,就无法再访问当前这个s结点了,也只会找到一条路径 
	cnt--;
}



int main(void){
	while(~scanf("%d%d",&n,&m)&&(n||m)){//输入结点数n和边数m 
		for(int i=0;i<n;++i){
			e[i].clear();//把邻接表中每一行的节点数清空,相当于初始化邻接表 
		} 
		for(int i=0;i<m;++i){//输入边 
			int x,y;
			scanf("%d%d",&x,&y);
			e[x].push_back(y);//如果是有向图,只需要在x后面连上y即可 
		//	e[y].push_back(x);如果是无向图,同样也要在y结点后面加上x 
		} 
		dfs(0,n-1);
	}
	return 0;
}


http://www.niftyadmin.cn/n/5026032.html

相关文章

【第四阶段】kotlin语言集合转换与快捷转换学习

1.list可以通过转换为set进行去重 2.list转set在转list也能去重 3.使用快捷函数distinct进行去重 package Kotlin.Stage4fun main() {val list mutableListOf("java", "ktolin", "c", "java", "ktolin", "c")pr…

MFC 如何启用/禁用菜单(返灰/不可点击状态)

1、为页面&#xff08;窗口&#xff09;添加一个菜单栏和子菜单 2、在XXDlg.h文件中定义一个菜单栏变量和bool变量 CMenu m_Menu; //菜单变量 bool m_EnableMenu;//菜单栏中某个子菜单禁用/启用&#xff08;变灰&#xff09;的控制变量3、在OnInitDialog函数中进行初始化&…

服务器硬件监控解决方案,提升服务器稳定性

前言 在当今数字化时代&#xff0c;服务器的稳定运行对于企业的核心业务至关重要。为了确保服务器的正常运行并及时发现潜在问题&#xff0c;我们公司开发了一款先进的服务器硬件监控解决方案。本文将深入探讨服务器硬件监控的重要性、解决方案的特点和优势&#xff0c;以及支持…

Spring MVC 八 - 内置过滤器

SpringMVC内置如下过滤器&#xff1a; Form DataForwarded HeadersShallow ETagCORS Form Data 浏览器可以通过HTTP GET或HTTP POST提交form data&#xff08;表单数据&#xff09;&#xff0c;但是非浏览器客户端可以通过HTTP PUT、HTTP DELETE、HTTP PATCH提交表单数据。但…

贝类包纳米虫病诊断方法

声明 本文是学习GB-T 42821-2023 贝类包纳米虫病诊断方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 242 g 57.1 mL 100 mL 1000 mL A.9 1 电泳缓冲液 50电泳缓冲液 加水定容至 室温贮存。 A.10 苏木精染液的配制方法 苏木精 无水乙醇 …

Vue前端框架11 组件事件与v-mode配合使用、组件数据传递(父传子)、插槽Slot、具名插槽、插槽中的数据传递(双向)

文章目录 一、组件事件与v-model配合使用二、组件数据传递&#xff08;子传父&#xff09;三、插槽Slots四、具名插槽五、插槽中的数据传递 一、组件事件与v-model配合使用 组件A的数据变化 组件B可以实时显示 <template><h3>Main</h3><p>搜索内容为…

影视广告制作团队规模和分工

影视广告制作团队的规模和分工可以因项目规模和具体需求而有所不同&#xff0c;以下是一般情况下的常见角色和分工&#xff0c;由深圳影视广告制作公司老友记小编为您整理&#xff1a; 1.制片人&#xff08;Producer&#xff09;&#xff1a;负责整个广告项目的策划、组织、协…

SpringBoot-线程池ThreadPoolExecutor异步处理(包含拆分集合工具类)

ThreadPoolExecutor VS ThreadPoolTaskExecutor ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。 配置文件application.yml # 异步线程配置 自定义使用参数 async:executor:thread:core_pool_size: 10max_pool_size: 100 # 配置最大线程数queue_capacity: …