关于 const int & 的神奇错误
  • 板块学术版
  • 楼主Nazq
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/11/21 17:17
  • 上次更新2024/11/21 20:13:32
查看原帖
关于 const int & 的神奇错误
1051166
Nazq楼主2024/11/21 17:17

一道图论题。

变量解释:

BB:连通块的编号;

g(B)g(B)BB 连通块的点集;

bel(u)bel(u)uu 所在连通块编号;

写了一个 Dijkstra,传入 BBconst int &BB 就会改变。

值传递就不会。

void Dijkstra(const int &B){
	while(!q.empty())q.pop();
	printf("IN\n");
	for(int i:g[B]){
		q.push(make_pair(-dis[i],i));
		printf("%d: %d\n",B,i);
	}
	while(!q.empty()){
		int u=q.top().second;
		q.pop();
		if(vis[u])continue;
		if(bel[u]!=B)
			printf("%d %d-%d\n",u,bel[u],B);
		vis[u]=1;
		for(int i=head[u],v,w;i;i=e[i].nxt){
			v=e[i].to,w=e[i].cost;
			if(dis[v]>dis[u]+w){
				dis[v]=dis[u]+w;
				if(bel[v]==bel[u])
					q.push(make_pair(-dis[v],v));
			}
			if(bel[v]!=B && --d[bel[v]]==0)
				stk[++top]=bel[v];
		}
	}
	printf("OUT\n");
}
Output:
IN
9: 13
9: 24
9: 21
9: 17
9: 37
9: 29
17 9-8
13 9-8
21 9-8
29 9-8
37 9-8
OUT

可以看到 BB99 变到 88

是否 const int &B 存在情况会使 BB 改变?

2024/11/21 17:17
加载中...