迷宫夺宝

1.1 题目要求
一个N x N的矩阵代表了一个迷宫,迷宫中每个房间由以下三种数字的一种来表示:
    0 代表房间安全,是可以通过的。
    1 代表房间中有奖励物品,玩家可以拿到奖励并通过房间。
    -1 代表房间中有障碍,玩家不能通过房间。
    你的任务是在遵守下列规则的情况下,尽可能多的拿到奖励:
    玩家从起始位置 (0, 0) 出发,到达终点(N-1, N-1) ,只能向下或向右走,并且只能穿越有效的房间(即只可以穿过值为0或者1的房间);当到达 (N-1, N-1) 后,完成走动过程;当你经过一个房间且这个房间有奖励时,拿到奖励后这个房间会变成空的(值变为0);如果在(0, 0)和(N-1, N-1)之间不存在一条可经过的路径,则没有奖励能被拿到。

思路:DP + DFS 先找到能获得最大的奖励,再通过DFS从后往前找路径

#include<stdio.h>
#include<stdlib.h>#define LEN 4
int matrix[LEN][LEN] = { 0, 1, 1, -1, 1, 0, -1, 0, 1, 1, 0, 1, -1, 0, 1, 0};
int DP[LEN + 1][LEN + 1] = {0};
int Route[LEN + 1][LEN + 1] = {0};void PrintNums(int (*matrix)[LEN]){for(int i = 0; i < LEN; i++){for(int j = 0; j < LEN; j++){printf("%d ", matrix[i][j]);}printf("\n");}
}
void PrintDP(int (*matrix)[LEN + 1]){for(int i = 1; i < LEN + 1; i++){for(int j = 1; j < LEN + 1; j++){printf("%d ", matrix[i][j]);}printf("\n");}
}
int Max(int num1, int num2){return num1>=num2?num1:num2;
}
int FindMaxValue(int (*matrix)[LEN]){int MaxValue = 0; for(int i = 1; i < LEN + 1; i++){for(int j = 1; j < LEN + 1; j++){if(matrix[i-1][j-1] != -1){MaxValue = Max(DP[i-1][j], DP[i][j-1]);DP[i][j] = MaxValue + matrix[i-1][j-1];}}}MaxValue = DP[LEN][LEN];return MaxValue;
}
void DFS(int i, int j){Route[i][j] = 1;//标记当前已经走过的路径printf("%d %d\n",i,j);if(i == 1 && j == 1){return;}if(j >= 2 && (DP[i][j] == DP[i][j-1] || DP[i][j] == DP[i][j-1] + 1)){DFS(i, j-1);//不加 >=2 会断错误 类似1 -1 1 -2return;//如果是寻找最大礼物的所有路径则无需加return 可见最后2}if(i >= 2 && (DP[i][j] == DP[i-1][j] || DP[i][j] == DP[i-1][j] + 1)){DFS(i-1, j);return;}}
void FindRoute(int MaxValue){int i = LEN;int j = LEN;Route[i][j] = 1;Route[0][0] = 1;while(i != 0 && j != 0) {if(DP[i][j-1] == MaxValue) {Route[i-1][j] = 1;i--;}else if(DP[i][j-1] == MaxValue) {Route[i][j-1] = 1;j--;}else{if(DP[i-1][j] == MaxValue - 1) {Route[i-1][j] = 1;i = i - 1;MaxValue --;}else {Route[i][j-1] = 1;j = j - 1;MaxValue --;}}}
}
void main(){//int row = sizeof(matrix)/sizeof(matrix[0]);//int column = sizeof(matrix[0])/sizeof(matrix[0][0]);PrintNums(matrix);printf("获取最大礼物值:%d\n", FindMaxValue(matrix));//PrintDP(DP);//FindRoute(FindMaxValue(matrix));printf("DP动态规划后数组值\n");PrintDP(DP);DFS(LEN,LEN);printf("获取最大礼物值的路线\n");PrintDP(Route);
}

实验结果图:

没加return 递归过程会出现左和上两个分支去探测

数据结构与算法 迷宫夺宝 C语言相关推荐

  1. 第三届中国高校智能机器人创意大赛ROS挑战赛-迷宫夺宝机器人

    全国高校智能机器人大赛之ROS挑战赛-迷宫夺宝机器人 一.作品简介 比赛规则:http://www.annisen.com/details.aspx?id=163 参赛作品: 获奖: 二.硬件架构 系 ...

  2. Java夺宝_Java实现 蓝桥杯VIP 算法提高 夺宝奇兵

    算法提高 夺宝奇兵 时间限制:1.0s 内存限制:512.0MB [题目描述] 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: ...

  3. 蓝桥杯 算法提高 夺宝奇兵

    算法提高 夺宝奇兵   时间限制:1.0s   内存限制:512.0MB      [题目描述] 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图 ...

  4. 数据结构与算法入门教程(C语言实现版)

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 C语言数据结构与算法 BF和 ...

  5. 数据结构与算法——迷宫问题

    课程名称:数据结构与算法 设计题目:迷宫问题 已知技术参数和设计要求: 问题描述: 以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍.迷宫问题要求求出从入口(1,1)到出口(m,n)的一 ...

  6. 蓝桥杯 ADV-62算法提高 夺宝奇兵(动态规划)

    [题目描述] 在一座山上,有很多很多珠宝,它们散落在山底通往山顶的每条道路上,不同道路上的珠宝的数目也各不相同.下图为一张藏宝地图: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 &qu ...

  7. 数据结构和算法文章目录(C语言 唐发根版)

    笔者花费一年的时间,呕心沥血,重新学习了一遍大学的<数据结构和算法>课程,整理了34篇博客文章. 本专题涉及概述.线性表.数组.堆栈和队列.树和二叉树.图.文件及查找.排序算法等八个模块, ...

  8. 数据结构与算法 迷宫问题

    迷宫问题问题描述: 栈的实现在这篇博客中:https://blog.csdn.net/zj1131190425/article/details/87991662 迷宫是一个矩形区域,有一个出口和入口, ...

  9. 数据结构排序算法之归并排序(c语言实现)

    博主身为大二萌新,第一次学习数据结构,自学到排序的时候,对于书上各种各样的排序算法顿觉眼花缭乱,便花了很长的时间尽力把每一个算法都看懂,但限于水平有限,可能还是理解较浅,于是便将它们逐个地整理实现出来 ...

最新文章

  1. 图像复原与重建(含傅里叶切片定理推导)
  2. python的unittest測试框架的扩展浅谈
  3. MSSQL如何在没有主键的表中删除重复数据
  4. android网格布局间距,android – 删除回收站视图网格布局中的默认间距
  5. 逻辑回归(Logistic Regression)学习笔记
  6. 英文的写作 —— 句子的积累
  7. Could not get resource ‘https://dl.google.com/dl/android/maven2/com/android/
  8. 《西方确指》明心生极乐、专修净土乃大孝、持咒显空慧
  9. 已解决:git push代码出现Support for password authentication was removed on August 13, 2021.
  10. 计算机的配件知识,组装一台电脑需要哪些配件 DIY装机必看的电脑硬件知识详解 (全文)...
  11. 字节跳动 文林福_AI实力赋能,让汽车营销玩出抖音范
  12. 2017最新总结政府大数据应用案例及启示
  13. vue-awesome-swiper实现轮播图片
  14. python--手机步数----微信运动--支付宝运动等步数刷新
  15. java html转pdf的几种方式_java 有关word,excel,pdf转换成html 有几种方式
  16. C++删除文件末尾的空行
  17. python实现魔方复原_大佬们帮忙看一下,python解三阶魔方有沒有更快的方法
  18. python 处理EXCEL 追加写
  19. 《个体软件过程》—第8章8.2节认真制订承诺
  20. 《Diffusion Curves: A Vector Representation for Smooth-Shaded Images》翻译

热门文章

  1. 2023年,什么行业更有发展前景?
  2. ecognition-易康软件相关操作文档和视频
  3. 今日头条和今日头条极速版究竟有什么区别?
  4. static在Java中的使用
  5. 光影 - 技术支持网址
  6. vb.net如何查询电脑麦克风收到声音_乐学培优线上课【电脑端】上线啦!让学习更震撼!...
  7. 加解密工具RSATool的使用
  8. 天文学习资料(from CL)
  9. Oracle10g 数据库论文
  10. Visual Studio“无法启动程序”系统找不到指定文件