如下,这是我的一个关于dijkstra算法的代码,是p3371的题目,当然这些不重要,重要的是关于我用memset给dist数组初始化2^31-1的时候发现数据最后的值总是有所偏差,比如我之前初始化的2147483647,但是结束后它的值就变成2139062143,导致没办法ac,这个该怎么解决,求助
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
int dist[10020];
int vis[10020];
struct Edge
{
int to,w;
};
vector<Edge> node[10020];
bool check(int n){
for(int i = 1;i<=n;i++){
if (vis[i] == 0){
return 1;
}
}
return 0;
}
int main(){
int n,m,s;
cin >> n >> m >> s;
for(int i = 0;i<m;i++){
int u,v,w;
Edge nod;
cin >> u >> v >> w;
nod.to = v;
nod.w = w;
node[u].push_back(nod);
}
memset(dist,127,sizeof(dist));
dist[s] = 0;
for(int z = 1;z<=n;z++){
int minNode = 0;
for(int i = 1;i<=n;i++){
if (!vis[i] && dist[i] < dist[minNode]){
minNode = i;
}
}
vis[minNode] = 1;
for(int i = 0;i<node[minNode].size();i++){
dist[node[minNode][i].to] = min(dist[node[minNode][i].to],dist[minNode] + node[minNode][i].w);
}
}
for(int i = 1;i<=n;i++){
cout << dist[i] << " ";
}
}