平面图中的欧拉定理

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境 目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 ) 阅读详情

定理:设G为任意的连通的平面图,则v-e+f=2,v是G的顶点数,e是G的边数,f是G的面数。

题目描述:给出一个一笔画图形的n个节点的坐标,请你求解这个图形把平面分成了几个面
一笔画图形一个是把图上所有的边仅且遍历一次的封闭连通图。
分析:求面的问题就分解为求顶点个数与边条数的问题。
点的求法:遍历每条线段,如果是规范相交,则将该点存入V[]数组中。最后对V[]数组进行排序,使用STL中的unique()函数对求出来的交点进行去重处理。
边的求法:遍历每个交点和每条线段,如果交点在线段上,边数加一

//欧拉定理
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string.h>
#include <vector>

using namespace std;

struct point
{
    double x, y;
    point(double x = 0.0, double y = 0.0) :x(x), y(y) {};
};
typedef point Vector;

const double eps = 1e-8;
//判断double类型(x)与0的大小
int dcmp(double x) { if (fabs(x)<eps) return 0; return (x<0) ? -1 : 1; }

//向量的运算符重载
Vector operator + (Vector A, Vector B) { return Vector(A.x + B.y, A.y + B.y); }
Vector operator - (Vector A, Vector B) { return Vector(A.x - B.y, A.y - B.y); }
Vector operator * (Vector A, double p) { return Vector(p * A.x, p * A.y); }
Vector operator / (Vector A, double p) { return Vector(A.x / p, A.y / p); }
bool operator < (const point& a, const point& b) {//判断a点是否小于b点
    return a.x < b.x || (a.x == b.x && a.y < b.y);
}

bool operator == (const point& a, const point &b) {//判断两个点是否相等
    return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}
//向量的运算
double Dot(Vector A, Vector B) { return A.x * B.x + A.y * B.y; }//向量的点乘
double Cross(Vector A, Vector B) { return A.x * B.y - A.y * B.x; }//向量的叉积

 //判断规范相交
bool SegmentProperIntersection(point a1, point a2, point b1, point b2)
{
    double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);
    double c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);

    return dcmp(c1)*dcmp(c2)<0 && dcmp(c3)*dcmp(c4)<0;
}

//两直线交点(参数法)
point GetLineIntersection(point P, Vector v, point Q, Vector w) 
{
    Vector u = P - Q;
    double t = Cross(w, u) / Cross(v, w);
    return P + v*t;
}
//判断点p是否在线段a1a2上(叉乘=0;点乘<0)
bool OnSegment(point p, point a1, point a2)
{
    return dcmp(Cross(a1 - p, a2 - p)) == 0 && dcmp(Dot(a1 - p, a2 - p))<0;
}
const int maxn = 300 + 10;
point P[maxn], V[maxn * maxn];
int main()
{
    int n, kase = 0, c, e;
    while (~scanf("%d", &n) && n) {
        for (int i = 0; i < n; i++) {
            scanf("%d%d", &P[i].x, &P[i].y);
            V[i] = P[i];
        }
        c = n - 1; e = n - 1;
        for (int i = 0; i < c; i++)//遍历每个点
            for (int j = i + 1; j < c; j++)
                if (SegmentProperIntersection(P[i], P[i + 1], P[j], P[j + 1]))//如果是规范相交
                    V[c++] = GetLineIntersection(P[i], P[i + 1] - P[i], P[j], P[j + 1] - P[j]);//把交点存入V[]中

        sort(V, V + c);
        c = unique(V, V + c) - V;//把重复元素放到数组后面,c为(去重后)交点的个数
        for (int i = 0; i < c; i++)//遍历每个交点
            for (int j = 0; j < n - 1; j++)//遍历每条线段
                if (OnSegment(V[i], P[j], P[j + 1])) e++;//如果交点在线段上,边数加一
        printf("Case %d: There are %d pieces.\n", ++kase, e + 2 - c);
    }
}
【推荐100个unity插件之7】使用BehaviorDesigner插件制作BOSS的AI行为树 Behavior Designer是一个行为树插件,是一款为了让策划,程序员,美术人员方便使用的可视化编辑器。Behavior Designer提供了强大的AP1可以让你轻松的创建tasks(任务),配合uScript和PlayMaker这样的插件,可以不费吹灰之力就能够创建出强大的Al系统,而无需写行代码。(不懂PlayMaker的,我后面在单独出文章介绍一下,可以期待一下) 阅读详情

相关推荐

避坑指南:vue-print-nb打印隐藏元素与空白页的那些事儿

本文深入解析了使用vue-print-nb插件时,打印出现空白页及隐藏元素问题的根本原因与解决方案。核心在于理解浏览器打印原理,并通过CSS媒体查询精准控制样式。文章提供了从重置根元素高度、处理隐藏元素到控制分页的完整避坑指南,帮助开发者彻底解决打印样式难题。

weixin_29008691的博客 437

图论复习(六)———平面图性质与欧拉公式

平面图性质及欧拉公式平面图一、定义二、定理平面图性质—欧拉公式一、定理 平面图 一、定义 G = <V,E>是一个无向图。 1.图G可嵌入平面:如果可以把图G的所有结点和边都画在平面上,同时除断点外连线之间没有交点,就称图G可嵌入平面。画出的无边相交的G’称G的平面嵌入。 2.可平面化:如果图G可以嵌入平面,就称图G可平面化。 3.G中边所包含的区域称作一个面。有界区域称为内部面,无界区域称为外部面,常记作R0,包围面的长度最短的闭链称为该面的边界,面R的边界的长度称为该面的度数,记作deg®。

weixin_45550092的博客 1万+

告别网络卡顿!保姆级教程:用国内镜像源5分钟搞定ESP32开发环境(Arduino IDE)

本文提供了一份保姆级教程,教你如何利用国内镜像源在5分钟内快速搭建ESP32开发环境(Arduino IDE),告别网络卡顿问题。教程详细介绍了镜像源配置、开发板安装、测试程序烧录等步骤,并包含与巴法云对接的实战案例,帮助开发者高效完成物联网项目。

weixin_42536058的博客 589

图论-第六章

可平面图:若图G(可能交叉)可嵌入平面(能在平面画出图示的关系),则称G是可平面图(不一定是平面嵌入)平面嵌入(n个):可平面图G在平面上画出的无交叉边的图示(可以有曲线)平面图(平面嵌入的一个,n个是同构的):可平面图的任何一个平面嵌入都称为一个平面图例子图e不是可平面图,即为不可平面图。

qq_51347024的博客 7727

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf

Vivado2019.1 ZYNQ7020无Uart SDK调试打印调试信息xil_printf

泛红尘的博客 2996

python——模拟砍价

类型:随机数。

m0_62488776的博客 1970

[平面图欧拉定理]ONTAK2015. Ogród zoologiczny

给定n个点m条边的平面图,q个询问,每次询问给出k个点,问这k个点的导出子平面图的域的个数n<=5e4,m<=2e5,q<=1e6,Σk<=5e6平面图有一个性质 |E|≤3×n+6|E|\le 3\times n+6平面图欧拉定理:一个连通平面图满足 R=|E|−|V|+2R=|E|-|V|+2其中 RR 是域的个数(包括无穷域), EE 是边集, VV 是点集那么如果平面图不连通 R=|E

CE玩家 936

105. replace( )函数

【目录】

weixin_63986098的博客 1万+

平面图中的欧拉定理,平面图的性质

平面图的性质:边数小于等于3n-6 定理:设G为任意的连通的平面图,则v-e+f=2,v是G的顶点数,e是G的边数,f是G的面数。 转载于:https://www.cnblogs.com/cjoieryl/p/8463717.html...

weixin_34293059的博客 922

手把手教你用示波器实测CAN总线波形:快速区分高速、低速及常见故障

本文详细介绍了如何使用示波器实测CAN总线波形,快速区分高速CAN总线和低速CAN总线,并诊断常见故障。通过实战案例和波形分析,帮助工程师掌握CAN总线信号特征,提升故障排查效率,适用于汽车电子和工业控制领域。

weixin_33217202的博客 410

OCR技术解析:用Tesseract和PaddleOCR识别文本

OCR技术解析:用Tesseract和PaddleOCR识别文本 ,人工智能,计算机视觉,大模型,AI,光学字符识别(Optical Character Recognition,简称 OCR)是一项将图片、扫描件等文档中的文字信息转换为可编辑文本的技术。在数字化时代,OCR 技术广泛应用于文档处理、车牌识别、身份证识别、古籍数字化等领域,极大地提高了文字信息处理的效率。Tesseract 和 PaddleOCR 是两款极具代表性的 OCR 工具。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

扒一扒那些叫欧拉的定理们(五)——平面几何欧拉定理的证明

早点关注我,精彩不迷路!在前面的文章中,我们介绍了空间几何内的欧拉定理及其扩展,上一篇中又讲到了平面几何欧拉定理,相关内容请戳:扒一扒那些叫欧拉的定理们(四)——平面几何欧拉定理美学鉴赏扒...

magic2728的博客 4933

【大语言模型 14】Transformer权重初始化策略:从Xavier到GPT的参数初始化演进之路

权重初始化是深度学习训练成功的隐秘基石,特别是在Transformer这样的深层架构中,合适的初始化策略能够决定模型的训练稳定性和收敛速度。本文从经典的Xavier和He初始化出发,深入解析Transformer特有的初始化策略,通过数学推导、代码实现和实验分析,揭示不同初始化方法对大语言模型训练的深层影响。我们将探讨为什么GPT系列模型采用特定的初始化方案,以及如何针对不同层设计最优的初始化策略。

熵数实验室 1686

UVALA 3263 That Nice Euler Circuits(欧拉定理,判断线段相交)

解题思路: 欧拉定理: 设平面图的顶点数,边数和面数分别为V,E, F则 V + F - E = 2; 本题要求平面数,即 F = E + 2 - V; 因此只需要求出顶点数和边数。顶点数除了输入的顶点还包括两条线段相交的交点,同样如果三点共线,则原来的一条边变成了两条边。 #include #include #include #include #include #include

蘑菇--走在通往梦想的道路上。 839

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

UVALive - 3263 That Nice Euler Circuit——欧拉定理

欧拉定理:设平面图的定点数、边数和面数分别为V,E和F, 则V+F-E=2 注意精度问题,1e-10WA了,改成1e-8才过 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;cmath&gt; using nam...

hao_zong_yin的博客 432

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

扒一扒那些叫欧拉的定理们(三)——简单多面体欧拉定理的抽象形式

早点关注我,精彩不迷路!在前面的文章中,我们介绍和证明了简单多面体欧拉定理,相关内容请戳:扒一扒那些叫欧拉的定理们(二)——简单多面体欧拉定理的证明扒一扒那些叫欧拉的定理们(一)——基本介...

magic2728的博客 1911

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

UVA1342 That Nice Euler Circuit(ACM - ICPC 2004 Asia - Shanghai)(计算几何、欧拉定理)

欧拉定理:设平面图的顶点数、边数和面数分别为V,E,F,则V+F-E=2。 #include<bits/stdc++.h> using namespace std; const int N = 5007, M = 50007, INF = 0x3f3f3f3f; const double DINF = 12345678910, eps = 1e-10; struct Point{ double x, y; Point(double x = 0, double y = 0):.

繁凡さん的博客 488

poj2284 That Nice Euler Circuit(欧拉公式)

题目链接:poj2284 That Nice Euler Circuit 欧拉公式:如果G是一个阶为n,边数为m且含有r个区域的连通平面图,则有恒等式:n-m+r=2。 欧拉公式的推广: 对于具有k(k≥2)个连通分支的平面图G,有:n-m+r=k+1。 题意:给出连通平面图的各顶点,求这个欧拉回路将平面分成多少区域。 题解:根据平面图的欧拉定理“n-m+r=2”来求解区域数r。...

dhe56357的博客 298

Uvalive 3263 That Nice Euler Circuit(几何欧拉定理)

题目地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1264 思路:欧拉定理:设平面图的顶点数、边数和面数分别为V、E和F,则V+F-E=2。 顶点数可以通过计算两线段交点计算:首先判断两线段是否相交(每条线段的两个端点均在另一条线

哆啦AC梦的博客 628

计算几何学习10

这两天做了一些简单的题目 写完了第二期的1.2 poj 3334 给你一个尖端联通之后的两个漏斗形状的区域,问你问你对应面积对应的水平高度是多少 做法很明显是二分 注意的是连通器的性质是液面高度相同 因此二分的上界是 两个高点的min值 因为自己各种sb的错误 比如数组名打错 变量打反 调了很久 POJ 1819 和之前做的一个放置正方形的题目很像 但是这题的条件是哪些圆删去后,不会影响序列的放...

weixin_43133015的博客 47

图论 ACM 算法竞赛

图论学习资料 图论五百题 看到了有大神刷了五百题的图论, 感慨万千, 路漫漫其修远兮, 吾将上下而求索 图论五百题 以此为志 超级好的博客ACdreamer 图论基础知识 2017/8/14 图论 1. 什么是图, 一种高级数据结构, 三元组组成 ,V,点的集合, E ,边的集合, ψ是从边集合E到结点无序偶(有序偶)集合上的函数

海边拾贝,沧海一粟 1624

拓扑几何学

X(P)是多面体P的欧拉示性数。如果多面体P是同胚于一个球面的,那么X(P)=2,如果P同胚于一个接有h个环柄的球面(下图),那么X(P)=2-2h。如果把最外面的五边形外面也算作一个面,那就是点数-边数+面数 = 2,即。可以把多面体映射成图论图,直接利用图论图的结论即可。对于一个单连通多面体,点数-边数+面数 = 2。在一个联通无向图中,点数-边数+面数 = 1。

nameofcsdn的博客 1473

复数中欧拉公式与计算机,欧拉公式

在任何一个规则球面地图上,用 R记区域个 数 ,V记顶点个数 ,E记边界个数 ,则 R+ V- E= 2,这就是欧拉定理 ,它于 1640年由 Descartes首先给出证明 ,后来 Euler(欧拉 )于 1752年又独立地给出证明 ,我们称其为欧拉定理 ,在国外也有人称其 为 Descartes定理。[1]R+ V- E= 2就是欧拉公式。中文名欧拉公式外文名Euler's formula别...

weixin_31900373的博客 1899

【学习笔记】NOIP暴零赛

我是fw

cqbzlydd的博客 418

2022“杭电杯”中国大学生算法设计超级联赛(6)签到题5题

2022“杭电杯”中国大学生算法设计超级联赛(6)2022“杭电杯”中国大学生算法设计超级联赛(6)2022“杭电杯”中国大学生算法设计超级联赛(6)2022“杭电杯”中国大学生算法设计超级联赛(6)2022“杭电杯”中国大学生算法设计超级联赛(6)...

小哈里的博客 1693

【计几】欧拉公式

欧拉公式 欧拉定理 百度百科 计算几何 欧拉定理应用 内容: 如果一个联通平面图有 VVV 个顶点、EEE 条边、FFF 个面,那么V−E+F=2V-E+F=2V−E+F=2 定理扩充: 平面图包括 kkk 个连通分支,VVV 个顶点、EEE 条边、FFF 个面,那么V−E+F=k+1V-E+F=k+1V−E+F=k+1 定理推广: 多面体是平面图在三维下的拓展,也满足欧拉定理。 ...

ZhgDgE的博客 390
上一篇: 最长上升子序列问题LIS
下一篇: HDU1756--判断点与多边形的相对位置
joeycom2
博客等级 码龄11年 1粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值