在写Dijkstra算法时,我遇到了下面这个问题:为什么一开始memset成0x3f,最后判断的条件却是判断是否为0x3f3f3f3f呢?这是因为memset按字节进行赋值,每个字节都被赋成了0x3f,而一个整数包含四个字节,因此判断整数的值时是判断是否为0x3f3f3f3f。
int Dijkstra()
{
memset(dist, 0x3f, sizeof(dist));
dist[1] = 0;
for(int i = 0; i < n; i++)
{
int t = -1;
for (int j = 1; j <= n; j++)
{
if (!st[j] && (t == -1 || dist[j] < dist[t]))
{
t = j;
}
}
for (int j = 1; j <= n; j++)
{
dist[j] = min(dist[j], dist[t] + g[t][j]);
}
st[t] = true;
}
if(dist[n] == 0x3f3f3f3f)
return -1;
return dist[n];
}