一个错误的写法
查看原帖
一个错误的写法
514936
EllinY楼主2024/10/16 21:08

硬是让我调了好久。错的写法:

if(query[i][0]==1){
	dis[a[query[i][1]]][b[query[i][1]]]=
	dis[b[query[i][1]]][a[query[i][1]]]=c[query[i][1]];
	for(int k=1;k<=n;k++)
		for(int j=1;j<=n;j++)
			dis[k][j]=min(dis[k][j],
			min(dis[k][a[query[i][1]]]+dis[b[query[i][1]]][j]+c[query[i][1]],
			dis[k][b[query[i][1]]]+dis[a[query[i][1]]][j]+c[query[i][1]]));
}

对的写法:

if(query[i][0]==1){
	dis[a[query[i][1]]][b[query[i][1]]]=
	dis[b[query[i][1]]][a[query[i][1]]]=
	min(dis[a[query[i][1]]][b[query[i][1]]],c[query[i][1]]);
	for(int k=1;k<=n;k++)
		for(int j=1;j<=n;j++)
			dis[k][j]=min(dis[k][j],
			min(dis[k][a[query[i][1]]]+dis[b[query[i][1]]][j]+c[query[i][1]],
			dis[k][b[query[i][1]]]+dis[a[query[i][1]]][j]+c[query[i][1]]));
}

\\ 如图,左下和右下的点之间的最短距离是 33,但是如果在每次加入一条边时直接更新 disdis,就会把这两个点的距离变成 55

2024/10/16 21:08
加载中...