【题目描述】

有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。

第一行输入两个正整数m和n。

以下若干行每行四个正整数x1,y1,x2,y2x1,y1,x2,y2,表示第x1x1行第y1y1列的点和第x2x2行第y2y2列的点已经有连线。输入保证|x1−x2|+|y1−y2|=1|x1−x2|+|y1−y2|=1。

输出使得连通所有点还需要的最小花费。

【输入样例】

1 1 2 1

【输出样例】

【数据规模】

30%数据:n*m≤1000

100%数据:m,n≤1000

这题很有意思的一题,就是把坐标换成一个数,然后用并查集来做,这样就转换成我们平常做的类型,比较简单

还有一个问题,刚用vs不久,和我熟悉的codeblocks有点区别对于:ctrl+z在vs里是用ctrl+Y
ac代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e6+10;
int n, m;
int p[N];
int findth(int x)
	if (x == p[x]) return x;
	return p[x] = findth(p[x]);
int unionn(int x, int y)
	int xx = findth(x);
	int yy = findth(y);
	if (xx != yy) {
		p[yy] = xx;
		return 1;
	return 0;
int main()
	scanf("%d %d", &n, &m);
	for (int i = 1;i <= n * m;i++) p[i] = i;
	int x1, y1, x2, y2;
	while (scanf("%d %d %d %d", &x1, &y1, &x2, &y2) == 4) {
		unionn((x1 - 1)*m + y1, (x2 - 1)*m + y2);
	int sum = 0;
	for (int i = 1;i <= m;i++) {
		for (int j = 1;j < n;j++) {
			if (unionn((j - 1)*m + i, j*m + i))
				sum++;
	for (int i = 1;i <= n;i++) {
		for (int j = 1;j < m;j++) {
			if (unionn((i - 1)*m + j, (i - 1)*m + j + 1) ) sum += 2;
	printf("%d\n", sum);
	return 0;
 用于网格导航和路径规划的 EV3 项目
====================
 使用 lejos 库编写的 EV3 项目。 该机器人有 2 个颜色传感器和一个超声波传感器。 机器人从笔记本电脑上运行的 GUI 程序接收命令,并以尽可能最短的路径导航到这些点,前提是网格包含障碍物。 这些障碍物会在机器人导航时被发现并记住。
 A*用于路径规划,启发式分量采用曼哈顿法,开放节点权重为1,有障碍物节点权重为1000。
 java套接字连接用于通过蓝牙PAN网络在机器人和计算机之间进行通信
                                    Corner Point Grid Geometry in Reservoir Simulation
油气藏的几何形状通常包括倾斜和断层。为了区分由于这两种效应引起的深度变化,可以通过八个角点的位置指定模拟单元。这样一个单元的面可以是双线性曲面,并且可以构成变形网格的一部分。可以选择这样的网格,使单元边界沿着断层,断层可以是垂直的或倾斜的。正常和故障连接可在同等基础上进行处理。描述了用于构建此类模型的“坐标线”和角点深度系统。得到了细胞体积的精确解析表达式。透射率值是根据三个矢量相互界面面积计算的,它们自动包含倾斜流和倾斜流的校正。将计算出的透射率应用于简单的五点模型可能会导致不一致的有限差分格式,如果网格高度扭曲,则会导致显著误差。提出了一种避免此类误差的方法,该方法更准确地反映了压力和细胞几何结构之间的相互作用,从而产生流动。这是从基本的有限元类型原理推导出来的,并给出了测试用例的结果,将校正方案与简单的五点模型进行了比较。
                                    angular-seed — AngularJS 应用程序的种子
这个项目是一个典型的 Web 应用程序的应用程序框架。 您可以使用它来快速引导您的 angular webapp 项目和这些项目的开发环境。
 种子包含一个示例 AngularJS 应用程序,并预先配置为安装 Angular 框架和一堆开发和测试工具,以获得即时的 Web 开发满足感。
 种子应用程序没有做太多事情,只是展示了如何将两个控制器和视图连接在一起。
要开始使用,您可以简单地克隆 angular-seed 存储库并安装依赖项:
您需要 git 来克隆 angular-seed 存储库。 您可以从获取 git。
 我们还使用了许多 node.js 工具来初始化和测试 angular-seed。 您必须安装 node.js 及其包管理器 (npm)。 您可以从获取它们。
克隆角种子
使用克隆 angul
                                    思路:这道题比较特殊,由于横向和纵向的边权值分别是一样的,由此根据kruskal的原理先逐一遍历纵向的后再逐一遍历横向的即可,至于已经有的直接加在并查集里表示联通即可,后面遍历到不可能再加一遍的。...
通过阅读题目,设有nnn行mmm列,那么总共有n×mn\times mn×m个点,就相当于图中有n×mn\times mn×m个顶点。然后想用一些边,来使得所有顶点都能够连通,并且这些边权之和最小。那么这与最小生成树的含义是相同的。因此,透过题意我们知道其实就是想要求最小生成树。
但是题目还是有点特殊的,一条纵向的连线花费一个单位,一条横向的连线花费两个单位,也就是说边权只能是1或者2,而且某些点之间已经有连线了,也就是说有些顶点已经有边连接起来了。
我们将已有连线的这些
提交数: 2798     通过数: 967
【题目描述】
有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。
第一行输入两个正整数m和n。
以下若干行每行四个正整数x1,y1,x2,y2,表示第x1行第y1列的点和第x2行第y2列的点已经有连线。输入保证|x1−x2|+|
                                    【模拟试题】连接格点Description  有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。Input  第一行输入两个正整数m和n,以下若干行每行四个正整数x1,y1,x2,y2,表示第x1行第y1列的点和第x2行第y2列的点已经有连线。输入保证|x1-x2|+|y1-y...
描述Problem 2 : grid  
连接格点 问题描述:  
  有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。 输入格式  第一行输入两个正整数m和n。
class Solution:
    def getEdges(self, n: int, m: int, fa: List[int], mp: List[List[int]]):
        # 下标为0,2属于建立竖的边, 1, 3属于横的边, 坐标与权重要一一对应
        dx = [-1, 0, 1, 0]
        dy = [0,
                                    【问题描述】    有一个M行N列的点阵,相邻两点可以相连。一条纵向的连线花费一个单位,一条横向的连线花费两个单位。某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通。
【输入数据】
    第一行输入两个正整数m和n。
    以下若干行每行四个正整数x1,y1,x2,y2,表示第x1行第y1列的点和第x2行第y2列的点已经有连线。输入保证|x1-x2|+|y1-y