关于写法
查看原帖
关于写法
389540
imfkwk楼主2021/4/12 18:08

我知道自己的写法不是标准写法.....但是想知道这样写为什么不行

inline void jk()
{
	memset(dis, 0x3f, sizeof(dis));
	
	priority_queue<node>q;
	dis[s] = 0; flag[s] = 1;
	q.push((node){s});
	
	while (!q.empty())
	{
		int u = q.top().num;
		q.pop();
		
		for (register int e = hd[u]; e; e = fm[e])
		{
			int v = to[e];
			int w = vl[e];
			if (dis[v] > dis[u] + w)
			{
				dis[v] = dis[u] + w;
				if (!flag[v])
				{
					q.push((node){v});
					flag[v] = 1;
				}
			}
		}
	}
}

和标准写法的区别就在于入队。

inline void jk() {
	memset(d, 0x3f, sizeof(d));
	d[s] = 0;
	q.push((node){0, s});
	
	while (!q.empty()) {
		int u = q.top().pos;
		q.pop();
		
		if (flag[u]) continue;
		flag[u] = 1;
		
		for (register int e = hd[u]; e; e = fm[e]) {
			int v = to[e];
			int w = vl[e];
			if (d[v] > d[u] + w) {
				d[v] = d[u] + w;
                if(!flag[v])
				q.push((node){d[v], v});
			}
		}
	}
}
2021/4/12 18:08
加载中...