C++ 动态规划问题-最小代价路径

C++ 动态规划问题-最小代价路径,c++,recursion,c++14,dynamic-programming,shortest-path,C++,Recursion,C++14,Dynamic Programming,Shortest Path,我试着解决这个问题-。 我用Dijkstra的最短路径算法解决了这个问题。但当我尝试使用递归+记忆(即使用动态编程)时,我陷入了困境,无法调试代码。我需要帮助,以我的代码是错误的 我真的很高兴得到你的帮助 #include<bits/stdc++.h> using namespace std; int n; int a[105][105], dp[105][105]; int dfs(int x, int y){ if(x < 0 || y < 0 || x

我试着解决这个问题-。 我用Dijkstra的最短路径算法解决了这个问题。但当我尝试使用递归+记忆(即使用动态编程)时,我陷入了困境,无法调试代码。我需要帮助,以我的代码是错误的

我真的很高兴得到你的帮助

#include<bits/stdc++.h>

using namespace std;

int n;
int a[105][105], dp[105][105];

int dfs(int x, int y){
    if(x < 0 || y < 0 || x >= n || y >= n){
        return INT_MAX;
    }
    if(x == 0 && y== 0){
        return a[0][0];
    }
    if(dp[x][y] != -1){
        return dp[x][y];
    }
    dp[x][y] = a[x][y] + min(dfs(x-1, y), min(dfs(x, y-1), min(dfs(x+1, y), dfs(x, y+1))));
    return dp[x][y];
}


int main(){
    int tt;
    cin >> tt;
    while(tt--){
        int n;
        cin >> n;
        for(int i = 0 ; i < n; i++){
            for(int j = 0; j < n; j++){
                cin >> a[i][j];
                dp[i][j] = -1;
            }
        }
        cout << dfs(n-1, n-1) << endl;
    }
    return 0;
}



Example:
Input:
2
5
31 100 65 12 18 10 13 47 157 6 100 113 174 11 33 88 124 41 20 140 99 32 111 41 20
2
42 93 7 14

Output:
327
63
#包括
使用名称空间std;
int n;
INTA[105][105],dp[105][105];
整数dfs(整数x,整数y){
如果(x<0 | | y<0 | | x>=n | | y>=n){
返回INT_MAX;
}
如果(x==0&&y==0){
返回[0][0];
}
如果(dp[x][y]!=-1){
返回dp[x][y];
}
dp[x][y]=a[x][y]+min(dfs(x-1,y),min(dfs(x,y-1),min(dfs(x+1,y),dfs(x,y+1));
返回dp[x][y];
}
int main(){
int-tt;
cin>>tt;
而(tt--){
int n;
cin>>n;
对于(int i=0;i>a[i][j];
dp[i][j]=-1;
}
}

coutdfs
查看的全局变量
n
始终为零(通过静态初始化),它从未被赋值。当
main
调用时,比如说,
dfs(4,4)
,由于
4>=0
检查,函数立即返回
INT\u MAX


一旦你解决了这个简单的问题,你会发现你的程序由于堆栈溢出而崩溃。你看,
dfs(4,4)
调用
dfs(3,4)
,它依次调用
dfs(4,4)
,它调用
dfs(3,4)
,它


这不是一个真正的动态规划问题。它是一个“图中的最短路径”问题,适用于Dijkstra或A*算法。

请输入一个示例输入和预期输出,并尝试解释您遇到的问题。您可以在提供的链接中找到示例输入输出。我得到的输出是所有测试用例的INT_MAX值。请在问题内提供一个示例,而不依赖外部链接在编辑后的文章中提供了一个示例。希望能有所帮助。谢谢!!这帮助我尝试更改n的静态初始化,并了解了我的错误所在。是的,我已经使用dijkstra最短路径算法解决了这个问题。