c++,二维数组中的数值代表金币数,从左上角出发,只能向下或者向右移动,判断是否存在获取指定金币数值N的路径
来源:互联网 发布:unity3d插件map lab 编辑:程序博客网 时间:2024/05/16 17:04
/*
例如:
如下图所示,有一片棋盘格子样的街区,每个十字路口可能有一个传送门结束游览,用0表示,或者可能有一些金币供拾取,用地图上的数字表示。从左上角出发,只能向下或者向右移动,求给定地图是否存在某个路径可以获得指定数额的金币N。
*--5---1--4---15-23--4--8--1--15
| | | | | | | | | |
1--0---3--12--1---0--9--3--4--8
| | | | | | | | | |
4--5---7--0--58---5--0--7--9--3
| | | | | | | | | |
7--11--5--1---4--72--1--2--9--3
*/
/*
解决代码如下
*/
/*
基本思路是利用递归算法实现
*/
#include <iostream>
using namespace std;
//二维数组array中找number
void seek(int array[4][10],int number);
//向右找,array仍然是原来的数组,a,b表示目前所在的左上角坐标,number表示要找的数
void seekRight(int array[4][10],int a,int b,int number);
//向左找,array仍然是原来的数组,a,b表示目前所在的左上角坐标,number表示要找的数
void seekDown(int array[4][10],int a,int b,int number);
//判断是否找到的标志,初始化为false
bool finded = false;int main()
{
//初始化数组
int array[4][10] ={
{0,5,1,4,15,23,4,8,1,15},
{1,0,3,12,1,0,9,3,4,8},
{4,5,7,0,58,5,0,7,9,3},
{7,11,5,1,4,72,1,2,9,3}
};
//用于存储输入的数,先初始化为0
int number = 0;do
{
finded = false;
//输入数
cout<<"please input a number:";cin>>number;
cout<<"输入的是:"<<number<<endl;
//找数
seek(array,number);
//如果找到
if(finded)cout<<"finded!!!"<<endl;
//否则
elsecout<<"not finded!!!"<<endl;
}while(number != -1);
}
void seek(int array[4][10],int number)
{
//一开始左上角坐标是数组array[0][0];所以a = 0,b = 0;
int a = 0,b = 0;
//向右找这个数
seekRight(array,a,b,number);
//向左找数
seekDown(array,a,b,number);}
void seekRight(int array[4][10],int a,int b,int number)
{
//如果找到了
if(number == array[a][b+1]){
finded = true;
}
else if(number>array[a][b+1]){
//递归调用,不过数组的左上角坐标得发生变化,由于是向右找所以a不变,b+1,同时变成找number-array[a][b+1],其他类似
seekRight(array,a,b+1,number-array[a][b+1]);seekDown(array,a,b+1,number-array[a][b+1]);
}
else if(number < array[a][b+1])
{
//do nothing
}
}
void seekDown(int array[4][10],int a,int b,int number)
{
if(number == array[a+1][b])
{
finded = true;
}
else if(number>array[a+1][b])
{
seekRight(array,a+1,b,number-array[a+1][b]);
seekDown(array,a+1,b,number-array[a+1][b]);
}
else if(number<array[a+1][b])
{
// do nothing
}
}
- c++,二维数组中的数值代表金币数,从左上角出发,只能向下或者向右移动,判断是否存在获取指定金币数值N的路径
- 现有一个m * n的网格,从最左上角出发,每次只能向右或者向下移动一格,问有多少种不同的方法可以到达最右下角的格子
- 判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进
- 机器人位于m x n网格的左上角(在下图中标记为“开始”) 机器人只能随时向下或向右移动。
- 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
- 阵列从左上角出发,向右下方向步进,求路径和的最大值。
- 只能向右向下移动的迷宫
- 判断数组中的数值是否连续
- 经典问题:对于一个m*n的网格,从左上角的方格到右下角的方格,共有多少条路径(只允许向右和向下)
- 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少
- 给定一个充满非负数的网格,找到从左上到右下的路径,最小化沿其路径的所有数字的总和。只能向下或向右移动。
- 剑指offer--判断规则二维数组是否存在一个指定数
- 数组之判断一个数组中的数值是否连续相邻
- 面试题七 C/C++ 骑士营救公主 骑士只能向右或者向下移动,遇到陷阱就死了,求骑士营救公主的所有路线-程序员面试题
- 9.9递归和动态规划(二)——有个机器人坐在X*Y网格的左上角,只能向右、向下移动,机器人从(0,0)到(X,Y)有多少种走法
- 有一个X*Y的网格,只能向右、向下移动,从(0, 0)走到(X-1, Y-1),中间某些位置有障碍物,打印一条路径(
- 在二维数组中查找一个指定的数值
- 如何高效的判断数组中是否存在至少两个相同的数值,存在返回true,不存在返回false
- JVM性能调优之生成堆的dump文件
- 启动报错(持续更新)
- 具体截图
- get和post的区别
- Mina2.0学习笔记
- c++,二维数组中的数值代表金币数,从左上角出发,只能向下或者向右移动,判断是否存在获取指定金币数值N的路径
- webpack-dev-server不能自动刷新问题
- 20万、50万、100万的算法工程师,到底有什么区别?
- 第一次使用博客心情记录
- eclipse的使用
- 时间格式控制
- struts2用注解开发出错二 There is no Action mapped for namespace [/] and action name [zhujie] associated with
- 每日学习20170711--JAVA死锁排查利器
- LeetCode