【发布时间】:2021-11-15 07:01:22
【问题描述】:
我正在尝试编写一个动态编程问题,但我没有找到将 s[][] 矩阵传递给该函数的方法。任何人都可以帮助我解决问题。当我在代码中不包含 printparanthesis 函数的情况下运行代码时,我也会遇到分段错误。我知道它需要在该二维数组中有边界,但我无法弄清楚如何传递它,以便当我在矩阵顺序函数中调用此函数时,它可以正确运行。
#include <iostream>
using namespace std;
void printparanthesis(int s[][], int i, int j, char &name)
{
if (i == j)
{cout<<name++<<endl;
return;
}
cout<<"(";
printparanthesis(s,i,s[i][j],name);
printparanthesis(s,s[i][j]+1,j,name);
cout<<")";
}
void matrixorder(int ar[], int n)
{
int i,j,l,k,q;
int m[i][j], s[i][j],p[i];
for (i =1; i<n; i++)
{ m[i][j] = 0; }
for (l=2; l<n; l++)
{
for(i=1; i<n-l+1; i++)
{
j = i+l-1;
m[i][j] = 1.0/0.0;
}
for(k = i; k<j-1;k++)
{
q = ((m[i][k] + m[k+1][j]) + (p[i-1] * p[k] * p[j]));
}
if (q<m[i][j])
{
m[i][j] = q;
s[i][j] = k;
}
}
char name = 'A';
printparanthesis(s,1,n,name);
cout<<"Optimal Cost: "<<m[1][n];
}
int main() {
int ar[] = {4,10,3,12,20,7};
int n = sizeof(ar)/sizeof(ar[0]);
matrixorder(ar,n-1);
return 0;
}
【问题讨论】:
-
在编译时不知道数组大小的情况下传递二维数组是不可能的。如果允许,use something like this。如果不允许,无论如何都做类似的事情,但没有
vector -
另外,在您知道需要多少存储空间之前,也不要尝试为某些事情分配存储空间。
int m[i][j]取决于i和j的大小,i和j的值当时是未知的。
标签: c++