能走的格有相等的就会错
#include<bits/stdc++.h>
using namespace std;
int n,m,tu[1145][1145],ans;
bool vis[1145][1145];
void hhh(int x,int y) {
vis[x][y]=1;
ans+=tu[x][y];
if(x-1==n&&y==m) {
hhh(n,m);
return;
}
if(x+1==n&&y==m) {
hhh(n,m);
return;
}
if(x==n&&y==m+1) {
hhh(n,m);
return;
}
if(x==n&&y==m) {
return ;
}
bool v[3]= {0,0,0};
if(vis[x-1][y]==0&&x-1>0) {
v[0]=1;
}
if(vis[x+1][y]==0&&x+1<=n) {
v[1]=1;
}
if(vis[x][y+1]==0&&y+1<=m) {
v[2]=1;
}
if(v[0]==1&&v[1]==0&&v[2]==0) {
hhh(x-1,y);
return;
}
if(v[1]==1&&v[0]==0&&v[2]==0) {
hhh(x+1,y);
return;
}
if(v[2]==1&&v[0]==0&&v[1]==0) {
hhh(x,y+1);
return;
}
if(v[2]==1&&v[0]==1&&v[1]==0) {
if(tu[x][y+1]>tu[x-1][y]) {
hhh(x,y+1);
} else {
hhh(x-1,y);
}
return;
}
if(v[2]==1&&v[0]==0&&v[1]==1) {
if(tu[x][y+1]>tu[x+1][y]) {
hhh(x,y+1);
} else {
hhh(x+1,y);
}
return;
}
if(v[2]==0&&v[0]==1&&v[1]==1) {
if(tu[x-1][y]>tu[x+1][y]) {
hhh(x-1,y);
} else {
hhh(x+1,y);
}
return;
}
if(v[2]==1&&v[0]==1&&v[1]==1) {
if(tu[x+1][y]>tu[x-1][y]&&tu[x+1][y]>tu[x][y+1]) {
hhh(x+1,y);
return;
}
if(tu[x-1][y]>tu[x+1][y]&&tu[x-1][y]>tu[x][y+1]) {
hhh(x-1,y);
return ;
}
if(tu[x][y+1]>tu[x-1][y]&&tu[x][y+1]>tu[x+1][y]) {
hhh(x,y+1);
return ;
}
}
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
cin>>tu[i][j];
vis[i][j]=0;
}
}
hhh(1,1);
cout<<ans;
return 0;
}