如果你分层图全WA
查看原帖
如果你分层图全WA
983702
lrj3247楼主2024/11/2 16:55

1.建边的时候起点终点之间的两层之间的路径为0,或者建边的时候两层图中间的起终点。 2. 要所有x值或y值相等的所有边都建上 不要这样

sort(a+1,a+tot+1,cmpx);
	for(int i = 2 ; i<=tot ; i++){
		if(a[i].x==a[i-1].x){
			e[a[i].id].push_back(Edge{a[i-1].id,abs(a[i].y-a[i-1].y)*2});
			e[a[i-1].id].push_back(Edge{a[i].id,abs(a[i-1].y-a[i].y)*2});
		}
	}
	sort(a+1,a+tot+1,cmpy);
	for(int i = 2 ; i<=tot ; i++){
		if(a[i].y==a[i-1].y){
			e[a[i].id+tot].push_back(Edge{a[i-1].id+tot,abs(a[i].x-a[i-1].x)*2});
			e[a[i-1].id+tot].push_back(Edge{a[i].id+tot,abs(a[i-1].x-a[i].x)*2});
		}
	}

要这样

sort(a+1,a+tot+1,cmpx);
	for(int i = 2 ; i<=tot ; i++){
		int j = 1;
		while(i-j>0&&a[i].x==a[i-j].x){
			e[a[i].id].push_back(Edge{a[i-j].id,abs(a[i].y-a[i-j].y)*2});
			e[a[i-j].id].push_back(Edge{a[i].id,abs(a[i-j].y-a[i].y)*2});
			++j;
		}
	}
	sort(a+1,a+tot+1,cmpy);
	for(int i = 2 ; i<=tot ; i++){
		int j = 1;
		while(i-j>0&&a[i].y==a[i-j].y){
			e[a[i].id+tot].push_back(Edge{a[i-j].id+tot,abs(a[i].x-a[i-j].x)*2});
			e[a[i-j].id+tot].push_back(Edge{a[i].id+tot,abs(a[i-j].x-a[i].x)*2});
			++j;
		}
	}
2024/11/2 16:55
加载中...