问题:给定一个大小为nxm的网格,其中网格中的每个单元格都有一个值。
必须做什么:找到长度为4的路径,使得总和是路径中单元格的最大值。
路径定义为4个单元格的组合,使得一个单元格与路径中的一个单元格相邻(向上,向下,向左,向右)。
我的方法:n和m的值非常小,(16),所以我决定使用回溯。这是我的方法,然而,它没有运行。
任何帮助?
#include <bits/stdc++.h>
using namespace std;
vector <int> v;
bool vis[16][16];
int grid[16][16];
int n,m,c,s;
void backtrack(int x, int y)
{
if(x>n-1||y>m-1||x<0||y<0)
return;
if(vis[x][y])
return;
c++;
vis[x][y]=true;
s+=grid[x][y];
if(c==4)
{
v.push_back(s);
s-=grid[x][y];
c--;
vis[x][y]=false;
return;
}
backtrack(x+1,y);
backtrack(x-1,y);
backtrack(x,y+1);
backtrack(x,y-1);
vis[x][y]=false;
c--;
s-=grid[x][y];
}
int main() {
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>grid[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{ c=0;
s=0;
backtrack(i,j);
}
}
for(int i=0;i<v.size();i++)
cout<<v[i];
return 0;
}
目前我只是将值存储在矢量中并显示,但没有添加任何内容。