15...
查看原帖
15...
1028478
haomouren楼主2024/10/9 21:38

能走的格有相等的就会错

#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;
}
2024/10/9 21:38
加载中...