我在商场珂卡芙专柜买了双珂卡芙0238056,回家发现除了吊牌,鞋子上连商标都没有,是假的吗?要不要拿... 在专柜买的一般是不会有假的,要在大商场里摆专柜都是有规定的,不放心的话可以打商家电话问一下就可以了,不一定产品上都有商标的 关于迪杰斯特拉算法(Dijkstra)? 黄线的循环是找 ( 距离 已经访问过的节点集合 最近的点 ),这个你已经看出来了。你还应该知道,这个 cost 矩阵对于 没有直接相邻的两个点,将其距离默认初始化为 INF ,表示不通。所以,举个栗子。 画个图,A 连到 B 再连到 C,B 还连到 D。我从 A 点出发,那么初始情况下我到 B 的距离为 AB,到 C 和 D 的距离为 INF (不相邻)。现在已知的情报:I.在初始情况下,访问过点集合中只有起点这一个。---在第一个循环我找到了距离当前访问过所有点最近的 B。每次第一个循环执行后,都有一句 vis[k] = true;将刚刚找到的 (距离访问过点集合最近的点) 加入 (访问过点集合中)。现在已知的情报:II.每次找到一个最近点,这个最近点被加入到已访问点集合中。III.这个新加入点就是向所有未知点更新的跳板。此时已知 B 是能直接到达 A 的 最近的点,那么:1.若一个点能到达 B ,也一定能到达 A,哪怕他原来和 A 之间的距离是INF。2.若一个点距离 B 最近,距离 A 也一定最近。3.若一个点不能通过任何点到达 A,那么这个点到 A 的最近距离就是他和 A 的直接距离 - AX 或 INF4.若一个点通过中继到达 A 的距离小于直接到达 A 的距离,那么这个点到 A 的最近距离就是通过中继到达 A 的距离。5.由 3,4 推出,接下来只需要更新 能到达 B 的这些点 "与 A 之间的距离" 即可。所以我就可以通过 (一个与 B 相邻的点到达 B 的距离),来更新 (这个点到达 A 的距离)。设该点为 X,AX = AB + BX。设为 X 是因为:在第一个循环中,扫描的只是与 A 直接相邻的点。而在访问过点集合之外,可能有无数个点,这些点都可能 - "不与 A 直接连接,但与 B 直接连接"。所以要全部更新一遍。PS:如果使用邻接表就可以只更新到达 B 的节点,这个离题了不讲。在这个例子中,我们可以通过 B ,更新 C 和 D 到 A 的距离。从逻辑上讲,由于 AB 通了,B 和 C, D 通,所以 A 和 C, D 也能走通。这就是绿线循环所做的事,(通过遍历存储 A 到 所有点距离的数组) 遍历所有未访问的点,(即刚才的 A B 就不用再算了),如果一个点 不能直接到达 B,那么其距离为 AB + INF >= INF,还是不通。而如果能直接到达 B,那么其距离为 AB + BX < INF,相当于 A 和这个不能直接到 A 的点,通过 B,通了。为什么不能放在黄线循环里直接做呢?因为黄线循环是一个寻找最值的过程,在循环结束前这个 最值 都是不确定的。所以不能在这个循环里做更新。---那为什么不可以用第一个for找到最短节点b,然后在第一个for外,执行vis=1然后更新最短路径(新最短路径=旧最短路径+集合距新节点距离)然后回到红线附近的循环继续判断,而要利用第二个for更新路径?而且你刚刚说的只有一个d需要更新我也不太懂…还有什么需要更新么?连接d的节点(假设有)?但是假如把vis[d]=1了,在红线附近的for不一样可以找到连d的最短路径的节点么?1.Dijkstra 算法要找的是 所有点到起点的最短路径长度。1.1 所有点。2.假设 B 是距离当前集合最近的未访问点,实际被更新距离的只有与 B 直接相邻的点这是对的。3.但是,与 B 相邻的点可能不止一个。要全部都更新。3.1 重复,Dijkstra 算法是计算 所有点到起点的最短路径长度。 一旦至此,死生有命,宁复图存。但以老母在堂,恐留兹恨耳。翻译 生与死都有自己的命运,我被捕了,我从没想过要活着!只是老母亲还在那里,害怕她的仇恨!