具有最大总和的网格中的恒定长度的路径

时间:2017-06-16 15:24:03

标签: c++ backtracking

问题:给定一个大小为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;
}

目前我只是将值存储在矢量中并显示,但没有添加任何内容。

0 个答案:

没有答案