棋盘游戏(c++)

文章描述了一种棋盘游戏,玩家需找到棋盘上值递增的最长路径。采用回溯法来解决,避免了简单遍历导致的重复计步问题。代码示例中,通过递归和回溯更新最大步数,并用二维数组记录已访问状态。
摘要由CSDN通过智能技术生成

描述

美美和小熊在玩棋盘游戏。美美给小熊一个m×n的棋盘,棋盘上每个位置都有一个值。小熊可以从任意一个位置开始,朝上下左右四个方向移动,但不能在对角线方向移动或是移动到界外。

小熊的目标是找到这样的路径:每次到达的位置的值都比上一个位置的值还要大(即路径的值是递增的)。

请找出最长的这样的路径。

输入

第一行n,m。1<=n,m<=200

接下来是n*m的棋盘矩阵

输出

最长的值递增的路径

输入样例 1 

3 3
9 9 4 
6 6 8 
2 1 1 

输出样例 1

4

来源

解题方法:回溯

自我错误纠正:不可以简单的遍历每个可以行走的方向后countstep++,这样会导致你每次从一个位置开始遍历时,countstep包括的步数其实涵盖了你在这个位置可以走的所有方向。

也不可以简单的用递归return dep[x+dx[i]][y+dy[i]]+1,这样只走了一个可以走的方向,没有对所有可以走的方向遍历。

#include <iostream>
#include <cstring>

using namespace std;

int m, n;
int g[200][200];
int visit[200][200];
int countstep;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int maxstep;

void dep(int x,int y)
{
    int f=0;
    for(int i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值