一、刷题内容
蓝桥杯真题:《跳跃》
二、知识点
复习:
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;
}