题目描述
有一个 n×m 的方格迷宫,每个格子上有一个正整数。
刚开始你在第1行第1列的格子上,每一次你可以往正右、正下、左下、右下方向前进一格,不能走出方格迷宫图外,最终到达第n行第m列的格子。
问沿路经过的正整数之和最大是多少。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
36
我的代码
#include<iostream>
using namespace std;
struct idx{
int x,y;
};
idx s,f,k;
int m,n,vis[1010][1010],ans=-1,p;
int P[4][2]={{1,0},{0,1},{-1,1},{1,1}};
void dfs(idx x,int sum){
if(x.x==f.x&&x.y==f.y){
ans=max(ans,sum);
return;
}
for(int i=0;i<=3;i++){
k.x=x.x+P[i][0],k.y=x.y+P[i][1];
if(vis[k.x][k.y]){
p=vis[k.x][k.y];
vis[k.x][k.y]=0;
dfs(k,sum+p);
vis[k.x][k.y]=p;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>vis[i][j];
}
}
s.x=1,s.y=1;
f.x=n,f.y=m;
p=vis[1][1];
vis[1][1]=0;
dfs(s,p);
cout<<ans;
return 0;
}
如果有人会请@我,谢谢。