关于memset的问题
  • 板块学术版
  • 楼主CasualJ
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/8/29 19:57
  • 上次更新2023/10/27 13:10:52
查看原帖
关于memset的问题
764625
CasualJ楼主2022/8/29 19:57

如下,这是我的一个关于dijkstradijkstra算法的代码,是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] << " ";
    }
}
2022/8/29 19:57
加载中...