gpt4 book ai didi

c++ - 同一变量的测试打印似乎给出了不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:15 24 4
gpt4 key购买 nike

这是用于 Dijkstra 算法的一小段代码。我正在尝试创建一个数组 (first_edge),它将告诉我 E 中每个“源”节点的起始索引,这是一个名为“Edge”的结构数组,其中包含源节点的 id#、目标节点的 id#,以及两者之间的距离。

这只是为了更快地找到从给定源节点引出的所有边。

我在 for 循环中内置的测试语句根据输入准确地打印出我所期望的,但是第二个循环,(for(j = 0; j < 15; j++ ){ code })打印出我所有的前 15 个值都只是 0。

我无法想象有什么会导致我的代码似乎对同一个问题给出两个不同的答案,但这似乎就是它正在做的事情。

int* first_edge = new int[23947350];

first_edge[0] = 0;

for(j = 1; j < 58333344; j++) {
if(E[j].src > E[j-1].src) {
if(j < 15) {
//this line prints what i expect it too, which is good
cout << "First edge updated " << j << " " << E[j].src << endl;
}
first_edge[E[j].src] = j;
if(j < 15) {
cout << "first edge now " << first_edge[E[j].src] << endl;
cout << "Oh and the index is " << E[j].src << endl;
} // end if
} // end if
} // end for

for(j = 0; j < 15; j++) {
// earlier prints verify the correct contents of first_edge, surely this will work!
cout << " " << first_edge[j] << " " << j << endl;
}

一些输出。我冒昧地让它不那么冗长,只给出了我给出的值。

((j = 3; E[j].src = 1; first_edge[E[j].src] = 3))  
((j = 5; E[j].src = 2; first_edge[E[j].src] = 5))
((j = 8; E[j].src = 3; first_edge[E[j].src] = 8))

由于对我的担忧的有效性存在一些疑问,我将 first_edge[1] 硬编码到较早的循环中,结果证明它是 3。在后面的 for 循环中,first_edge 从 0 到 14 的所有值打印为0.

最佳答案

假设 j = 7。

在第一个循环中,然后打印 7,然后是 E[7].src。

然后,在更新 first_edge[E[7].src] 之后,输出后跟 first_edge[E[7].src] 和 E[7].src。

在最后一个循环中,您先打印 first_edge[7],然后打印 7。

有什么理由让您期望所有这些都打印相同的内容吗?

我看不到。

关于c++ - 同一变量的测试打印似乎给出了不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20536143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com