C++刷题笔记 2023.2.24《跳跃》

文章详细介绍了如何运用深度优先搜索(dfs)策略解决蓝桥杯竞赛中的一道名为《跳跃》的题目。重点讨论了return语句在函数中的作用,以及0x3f3f3f3f作为近似无穷大值的应用。在解题过程中,利用递归思想进行路径探索,当达到边界并找到更优解时更新结果。
摘要由CSDN通过智能技术生成

一、刷题内容

蓝桥杯真题:《跳跃》

《跳跃》题目

二、知识点

复习:

return的作用:①对于不带返回值的用法,不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,这种用法类似于循环结构中的break语句的作用;②对于带返回值的用法,用于返回函数值,其不能用于void类型的函数,否则报错;③也可以用于返回一个函数,常见于递归调用。

0x3f3f3f3f:非常的好用,相当于无穷大且不容易溢出。

三、解题思路

这次是第一次用到dfs算法,大概懂了,用到了一点递归的思想。

每递归一次相当于走了一条路线。

再在函数的开始加一个if语句,用于当路线走到边界的时候,如果路线权值大于sum就赋值,否则结束这条路线(return)。

四、解题代码

#include <iostream>
using namespace std;
int n,m,sum=-0x3f3f3f3f;
int a[100][100];
void dfs(int x,int y,int w)
{
  w+=a[x][y];
  if(x==n-1&&y==m-1)
  {
    if(w>sum) sum=w;
    else return;
  }
  int next[6][2]={{1,0},{0,1},{2,0},{0,2},{3,0},{0,3}};
  for(int i=0;i<6;i++)
  {
    int tx=x+next[i][0];
    int ty=y+next[i][1];
    if(tx<=n-1&&ty<=m-1) dfs(tx,ty,w);
  }
}
int main()
{
  cin>>n>>m;
  for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>a[i][j];
  dfs(0,0,0);
  cout<<sum;
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值