求助
查看原帖
求助
580202
Siegerkranz_2735楼主2022/5/2 20:01

题目描述

有一个 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;
}

如果有人会请@我,谢谢。

2022/5/2 20:01
加载中...