phrame_ 2023-10-31 16:06 采纳率: 100%
浏览 3
已结题

为什么用memset会全wa

问题是来自于洛谷P3371 【模板】单源最短路径(弱化版)
是一道最短路的模板题
我在初始化d数组为无穷大时,用memset,就全wa

用for循环初始化的话就AC了,就算memset速度慢一些,也不至于全wa吧,求lao解答
下面是我的代码:

#include <bits/stdc++.h>
#define inf INT_MAX 
using namespace std;

using ll = long long ;
const int N = 1e5 + 50;
int n,m,s;
struct edge {int v,w;};
vector<edge> g[N];
int d[N];
int vis[N];
void dijkstra(int s) {
    for (int i = 0;i <= n; i++) d[i] = inf; // 将d初始化为无穷大
    //memset(d,inf,sizeof d); // 不要用memset
    d[s] = 0;
    for (int i = 1;i < n; i++) {
        int u = 0;
        for (int j = 1;j <= n; j++) {
            if (!vis[j] && d[j] < d[u]) u = j;
        }
        vis[u] = 1;
        for (auto ed:g[u]) {
            int v = ed.v,w = ed.w;
            d[v] = min(d[v],d[u] + w);
        }
    }
}
int main() {
    cin >> n >> m >> s;
    for (int i = 1;i <= m; i++) {
        int u,v,w; cin >> u >> v >> w;
        g[u].push_back({v,w});
    }
    dijkstra(s);
    for (int i = 1;i <= n ;i++) cout << d[i] << " ";
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 柯本 2023-10-31 16:22
    关注

    你要了解,memset是按字节填充的。你的inf填充时变成0xff了
    而单个for的话,4个字节应该是0x7fffffff,而memset结果为0xffffffff
    所以它们结果是不同的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 10月31日

悬赏问题

  • ¥15 plotBAPC画图出错
  • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
  • ¥15 Python卡尔曼滤波融合
  • ¥20 iOS绕地区网络检测
  • ¥15 python验证码滑块图像识别
  • ¥15 根据背景及设计要求撰写设计报告
  • ¥20 能提供一下思路或者代码吗
  • ¥15 用twincat控制!
  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理