#include <stdio.h> #define N 501 #define M 1000000 int rescue[N];// = {1,2,1,5,3} int startP,endP; int path[N]={0}; int size=0; int vex[N][N]={0}; int visit[N]={0}; int maxR=0; int minP=M; int pathcount=1; int pCount=0;//路径指针 void DFS(int start, int end){ int j,i = start; if(start == end){ //找到 int t, sumP=0, sumR=0; for(t=0;t<pCount;t++){ sumP += vex[path[t]][path[t+1]]; sumR += rescue[t]; } sumR += rescue[pCount]; if(sumP == minP) { if(sumR > maxR) { maxR = sumR; } pathcount++; } if(sumP < minP) { minP = sumP; pathcount = 1; maxR = sumR; } return; } else { for(j=0;j<size;j++){ if(vex[i][j] != 0 && visit[j] == 0){ visit[j] = 1; path[++pCount] = j; DFS(j, end); path[pCount--] = 0; visit[j] = 0; } } } } void init(){ int n,pCountt; int i; scanf("%d %d %d %d",&n, &pCountt, &startP, &endP); size = n; for(i=0;i<n;i++){ scanf("%d", &rescue[i]); } int r,c,value; for(i=0;i<pCountt;i++){ scanf("%d %d %d", &r, &c, &value); vex[r][c] = vex[c][r] = value; } visit[startP] = 1; path[0] = startP; DFS(startP, endP); } /* void init(){ int i,n,pCount; startP=0; endP=4; n=5; size = n; // rescue[size] = {1,2,1,5,3}; vex[0][1] = vex[1][0] = 1; vex[0][2] = vex[2][0] = 2; vex[0][3] = vex[3][0] = 1; vex[1][2] = vex[2][1] = 1; vex[2][4] = vex[4][2] = 1; vex[3][4] = vex[4][3] = 2; visit[startP] = 1; path[0] = startP; DFS(startP, endP); } */ int main(){ init(); // printf("%d", vex[399][499]); printf("%d %d", pathcount, maxR); return 0; }
三个测试点没过
相关推荐
本话题将深入探讨如何使用链式栈实现递归和非递归的迷宫路径求解方法,结合Java编程语言,以及深度优先搜索(DFS)策略。 首先,我们要理解链式栈是一种基于链表的数据结构,它支持栈的基本操作——压入(push)和...
### C语言生成迷宫并用递归算法求解路径 #### 一、问题背景与描述 本项目旨在利用C语言实现一个程序,该程序能够随机生成一个20×20的迷宫,并找到一条从入口到出口的有效路径。具体而言,程序需满足以下要求: 1...
- **已访问路径列表(reachedWay)**:存储到达目的地时经过的所有城市,用于跟踪递归过程中的路径。 - **路线花费映射(routeMap)**:记录到达目的地的路径及其总成本,以找到最短路径。 - **添加路线方法(add...
在这个场景中,我们采用了一种称为“回溯法”的策略,配合递归函数来找到从起点到终点的有效路径。本文将深入探讨回溯法的概念,递归函数的应用,以及如何将两者结合解决迷宫问题。 首先,理解回溯法是关键。回溯法...
本项目“c#非递归求解迷宫最短路径-源码”是用C#编程语言实现的一个解决方案,它不依赖递归算法,而是采用其他策略寻找迷宫中的最短路径。以下是对这一主题的详细解释。 1. **迷宫问题概述**:迷宫问题通常被抽象为...
递归调用自身实现回溯,直到找到路径或者遍历完所有可能的路径。 2. **非递归算法**:非递归方法通常是使用栈来模拟递归的过程,同样基于DFS策略。初始化一个栈,将起点压入栈中。然后进入循环,每次从栈顶取出一个...
该脚本可以扫描指定路径,将符合条件的文件全部找出。你可以添加自己的函数来处理符合条件的文件。如删除某个文件夹里的所有特定文件
- **树形结构遍历**:如二叉树、多叉树的深度优先搜索(DFS)通常采用递归实现,通过访问当前节点,然后分别对左右子树进行递归调用来遍历整个树。 - **分治算法**:快速排序、归并排序等排序算法利用了递归。快速...
Java实现矩阵中的路径(回溯法),采用非递归的回溯法,使用栈模拟递归过程。代码注释详细,可正常运行
本项目结合了两个核心概念:递归文件路径遍历和微信红包随机分配算法,这些都是Java开发者需要掌握的关键技能。 首先,让我们深入理解递归文件路径遍历。在Java中,遍历电脑上特定路径下的所有文件是常见的需求,...
在递归图分析中,一维信号特征可以通过分析图形的结构,如节点度、聚类系数、路径长度等来获得。 最后,“递归图”是递归图分析的核心,它是一种基于信号值的相互依赖关系构造的网络结构。在处理一维信号时,递归图...
在每个节点,我们尝试所有可能的下一步,并递归地探索这些路径,直到找到终点或回溯到无路可走。 - 递归函数会检查当前节点是否合法(不是墙壁)并标记为已访问,防止重复探索。如果当前位置是终点,则返回true表示...
在MATLAB中,这样的脚本通常包含加载函数、设置路径、配置参数等操作,以便用户能够顺利运行递归分析。 递归图的构建通常涉及以下步骤: 1. **追踪调用**:记录每次函数调用的细节,包括被调函数、调用者、参数等。...
在这个特定的项目中,我们有一个Java程序,它使用递归算法来解决查询某市地铁的最短路径的问题。递归算法是一种强大的工具,它通过将大问题分解为更小的相似子问题来解决复杂的问题。 首先,我们要理解什么是递归。...
函数以递归方式在路径中搜索与通配符表达式(例如“ images *。*”)或正则表达式(例如“ images [0-9]。* \。*”)匹配的文件名。 该函数返回与给定模式匹配的每个文件的完整路径的元胞数组。
在IT领域,尤其是在系统管理与开发中,"Unix递归访问"是一个常见的操作,它涉及到对文件系统的深度遍历。Unix/Linux系统以其强大的命令行工具而著名,递归访问是其中一个核心功能,允许用户或程序在目录结构中一层一...
这种方法可以应用于所有类型的递归算法,但是需要仔细地设计栈的数据结构和访问方法。 在实际应用中,递归算法和非递归算法都有其优缺点。递归算法易于理解和实现,但效率较低;非递归算法效率较高,但实现起来较为...
6. **回溯法**:在ACM竞赛中,递归常用于回溯法,如解决迷宫问题、八皇后问题等,通过尝试所有可能的路径并回溯来找到解决方案。 7. **动态规划与记忆化**:为了优化递归算法,可以采用动态规划的思想,将已经计算...
### 文件递归-XML递归-树图递归 #### 一、文件系统递归 在计算机科学中,文件系统递归是指通过遍历文件系统(通常是从根目录开始)来处理目录及其子目录下的所有文件的过程。这种方法常用于搜索特定类型的文件、...