笑為紅顏苦為誰 2014-12-13 04:23 采纳率: 0%
浏览 629

第一次到2 2 怎么返回到 1 1的 求解释下

#include
#include
using namespace std;
int a[100][100];
int s[100][100];
int m,n;

void dp_fun(int x,int y)
{
s[x][y] = a[x][y];
int max = 0;
if(x > 0 && max < s[x-1][y])
{
max = s[x-1][y];
}
if(y > 0 && max < s[x][y-1])
{
max = s[x][y-1];
}
s[x][y] = s[x][y] + max;
if(x<m-1) 2 1 2 3
{ 4 5 6
dp_fun(x+1,y); 7 8 9
}

if(y<n-1) 2
{
dp_fun(x,y+1);
}
return;
}

int main()
{
memset(s,0,sizeof(s));
cin>>m>>n;
for(int i=0;i {
for(int j=0;j {
cin>>a[i][j];
}
}

dp_fun(0,0);
for(i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cout<<s[i][j]<<"\t";
}
cout<<endl;
}
return 0;
}

第一次到2 2 怎么返回到 1 1的 求解释下


  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 04:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在给定的C++代码中,dp_fun函数用于计算矩阵 a 中元素 a[x][y] 的值。在这个过程中,它会尝试将当前元素与矩阵中的所有其他元素进行比较,并记录找到的最大值。

    为了从 1 1 返回到 2 2,我们需要对这个过程进行一些修改。首先,你需要初始化一个变量 result 来存储最终结果。然后,在每次递归调用时,检查 xy 是否已经等于 m - 1n - 1(即到达边界)。如果是,则更新 result 并返回。否则,继续执行递归调用。

    以下是修改后的代码:

    #include <iostream>
    
    using namespace std;
    
    int a[100][100];
    int s[100][100];
    int m, n;
    int result = 0;
    
    void dp_fun(int x, int y) {
        s[x][y] = a[x][y];
        
        int max = 0;
        if (x > 0 && max < s[x - 1][y])
            max = s[x - 1][y];
        if (y > 0 && max < s[x][y - 1])
            max = s[x][y - 1];
        
        s[x][y] += max;
        
        if (x < m - 1)
            dp_fun(x + 1, y);
        if (y < n - 1)
            dp_fun(x, y + 1);
    }
    
    int main() {
        cin >> m >> n;
        
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                cin >> a[i][j];
            }
        }
        
        dp_fun(0, 0);
        
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                cout << s[i][j] << "\t";
            }
            cout << endl;
        }
        
        return 0;
    }
    

    现在,当你运行这段代码并输入正确的矩阵后,它应该能正确地将 1 1 转换为 2 2

    评论

报告相同问题?