visual studio 2012-多维数组不会更新(C++)
visual studio 2012 - Multidimensional array wont update ( C++ )
我实现了Bellman-Kalaba的算法,用于在图中找到从顶点1到任何其他顶点的道路的最大值。问题是(虽然很傻),作为函数中的参数传递的第二个二维数组matrixaDrumurilorMaxime[20][20]不会更改任何值,即使我确实为它赋值,或者从另一个数组为它赋值。我确实从文件中初始化了第一个数组matrixaValorilor[20][20],它运行良好。第二个数组刚刚初始化为0,正如您在main函数中看到的那样。我使用的是Visual Studio 2012,可能是IDE的问题?也许有人也有这个问题,可以帮我一点。。。
void bellmanKalaba(int matriceaValorilor[20][20], int dim, int matriceaDrumurilorMaxime[20][20], int &linii, int &coloane)
{
linii = 1;
coloane = dim;
for(int j = 0; j < dim; j++)
{
matriceaDrumurilorMaxime[0][j] = matriceaValorilor[j][dim-1];
}
bool sfarsit = false;
while(sfarsit != true)
{
for(int poz = 0; poz < coloane; poz++)
{
int valMax = 0;
for(int j = 0; j < coloane; j++)
{
if( matriceaDrumurilorMaxime[linii-1][j] + matriceaValorilor[poz][j] > valMax )
valMax = matriceaDrumurilorMaxime[linii-1][j] + matriceaValorilor[poz][j];
}
matriceaDrumurilorMaxime[linii][poz] = valMax;
}
sfarsit = true;
int k = 0;
while(sfarsit == true)
{
if(matriceaDrumurilorMaxime[linii][k] != matriceaDrumurilorMaxime[linii-1][k])
sfarsit = false;
++k;
}
++linii;
}
}
void citireMatriceaValorilorDinFisier(int matriceaValorilor[20][20], int &dimensiune, char* numefisier)
{
int i = 0, j = 0;
dimensiune = 0;
ifstream file(numefisier);
string line;
string element;
size_t pos = 0;
string delimiter = " ";
while(getline(file,line))
{
++dimensiune;
while(pos = line.find(delimiter, 0) != string::npos)
{
pos = line.find(delimiter, 0);
element = line.substr(0,pos);
matriceaValorilor[i][j] = atoi(element.c_str());
line.erase(0, pos+delimiter.length());
++j;
}
++i;
j = 0;
}
file.close();
}
int main()
{
cout << "===Problema ordonantarii: graful potentiale etape===" << endl << endl << endl;
int varfuri = 0;
int matriceValorilor[20][20] = {0};
citireMatriceaValorilorDinFisier( matriceValorilor, varfuri, "Graf.txt");
cout << "Matricea valorilor arcelor:" << endl;
afisareMatrice( matriceValorilor, varfuri, varfuri );
int linii, coloane;
int matriceaDrumurilorMaxime[20][20] = {0};
bellmanKalaba(matriceValorilor, varfuri, matriceaDrumurilorMaxime, linii, coloane);
cout << "Matricea valorilor maxime ale drumurilor de la varful 1 la celelalte varfuri:" << endl;
afisareMatrice( matriceaDrumurilorMaxime, linii, coloane );
//int dimensiune;
//int drumMax[20];
//puncteCritie(matriceaDrumurilorMaxime, varfuri, matriceaDrumurilorMaxime, linii, coloane, drumMax, dimensiune);
//cout << "Punctele critice ale grafului potentiale etape:" << endl;
//afisareVector(drumMax, dimensiune);
cin.get();
return 0;
}
我不确定这是否是您的主要问题,但bellmanKabala
中存在逻辑错误。
启动while(sfarsit != true)
的循环永远无法完成。这是因为它包含启动while(sfarsit==true)
的循环。内部循环一直运行到sfarsit = false
被设置为止。但这意味着外循环将再次运行,并且没有其他break
语句或任何内容。
最终linii
将溢出数组的边界并导致未定义的行为。
除了修复这个错误外,您还可以在++linii
之后添加一个检查,if (linii >= dim)
然后中止并打印一条错误消息,表明出现了问题;而不仅仅是溢出缓冲区。内部循环还应该检查k < dim
。
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 在运行时使用范围更新结果
- 用非原子更新原子变量,反之亦然