周长

抽象类

回眸只為那壹抹淺笑 提交于 2020-02-24 05:56:35
1.当用abstract来修饰一个类时,这个类就是抽象类。当abstract来修饰一个方法时,这个方法就是抽象方法。 2.含有抽象方法的类必须被定义为抽象类, 抽象类必须被继承,抽象方法必须被重写 3.抽象类不能被实例化,只能被子类继承。 4.抽象方法只需声明,无需实现,抽象方法没有方法体 例,在同一个包下定义一个Shape.java文件 public abstract class Shape { { System.out.println("执行Shape的初始化块"); } //定义一个计算周长的抽象方法 public abstract double calPerimeter(); //定义一个返回形状的抽象方法 public abstract String getTyp(); } 再定义一个Triangle.java文件 public class Triangle extends Shape{ //定义三边 private double a; private double b; private double c; public Triangle(double a,double b , double c) { this.setSides(a,b,c); } public void setSides(double a, double b , double c){ if (a >=

【扫描线_求周长】HDU 1828 Picture(两种方法【详】)

↘锁芯ラ 提交于 2020-01-20 08:37:30
HDU 1828 Picture 题意:n个矩形块(有叠加部分),求所有矩形块形成的大的二维图形的周长。 思路:首先说求 横向边长度 = 当前扫描线覆盖的横向长度 - 上一次扫描线覆盖的横向长度 。再就是垂直长度。 新开三个数组 lc[ rt ]: rt 区间的左端点有没有被扫面线覆盖 rc[ rt ]: rt 区间的右端点有没有被扫描线覆盖 num[ rt ]: rt 区间有几条线段 num数组的更新涉及到区间合并:如果左儿子区间的右端点和右儿子区间的左端点都被覆盖了,那么说明两个区间可以合并成一个。所以此时num需要减一 那么 垂直长度就是两条扫描线间的高度 * 2 * num[ 1 ] //每个线段有两条边 注意:按照y坐标排序时,如果y坐标相同,那么一定要 先扫入边,后扫出边 。G++过不了就是因为忽略了这个原因,会将实际没用的出边多计算两次贡献。【下面代码最后给的第三组样例就可以把先扫出边、后扫入边的hack掉,可以自己调试蛤儿qwq】 #include <iostream> #include <cstdio> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <limits> #include <vector> #include <stack>

463-岛屿的周长

旧时模样 提交于 2020-01-19 19:27:06
463-岛屿的周长 给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。 网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。 示例 : 输入: [[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]] 输出: 16 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/island-perimeter 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 public int islandPerimeter(int[][] grid) { // 1的个数*4 - 1相邻的个数*2 int cnt = 0; int adj = 0; for(int i = 0; i < grid.length; i++) { for(int j = 0; j < grid[i].length; j++) { if(grid[i][j] == 1) { cnt++; if(i < grid.length - 1 &&

图像与轮廓检测-轮廓检测

南笙酒味 提交于 2020-01-09 10:54:45
一、找出图像的轮廓、画轮廓、轮廓面积、轮廓周长、获得轮廓近似 cv2.findContours(img,mode, method) # 找出图中的轮廓值,得到的轮廓值都是嵌套格式的 参数说明:img表示输入的图片,mode表示轮廓检索模式,通常都使用RETR_TREE找出所有的轮廓值,method表示轮廓逼近方法,使用NONE表示所有轮廓都显示 cv2.drawCountours(img, contours, -1, (0, 0, 255), 2) # 画出图片中的轮廓值,也可以用来画轮廓的近似值 参数说明:img表示输入的需要画的图片, contours表示轮廓值,-1表示轮廓的索引,(0, 0, 255)表示颜色, 2表示线条粗细 cv2.contourArea(cnt, True) # 计算轮廓的面积 参数说明:cnt为输入的单个轮廓值 cv2.arcLength(cnt, True) # 计算轮廓的周长 参数说明:cnt为输入的单个轮廓值 cv2.aprroxPolyDP(cnt, epsilon, True) # 用于获得轮廓的近似值,使用cv2.drawCountors进行画图操作 参数说明:cnt为输入的轮廓值, epsilon为阈值T,通常使用轮廓的周长作为阈值,True表示的是轮廓是闭合的 x, y, w, h = cv2.boudingrect(cnt) #

P3072 [USACO13FEB]周长Perimeter

爷,独闯天下 提交于 2020-01-08 15:38:54
USACO的题目,感觉还是挺神奇的. 前置芝士 1. DFS ( BFS )遍历:用来搜索(因为DFS好写,本文以DFS为准 还不是因为作者懒 ) 2. STL 中的set(map)的基本用法:数据很大,不能直接存. 具体做法 因为不能把草堆围起来造成的周长记录起来所以不能再草堆中搜索,需要再这个草堆外面绕着搜索这样就不会将内部的周长记录下来了. 如这样一张图它的周长是(红色部分): 于是需要找到一个在最外边的点,可以发现最上方的那个点的就十分合适,搜索的位置(蓝色部分) 从最上方开始搜,如果搜到了草就answer++,return. 但是这样搜的时候如果一直往外跑就会直接炸掉,所以必须不能有这种情况,可以发现对于每一个蓝色位置的八个方向的一格处至少有一个草堆,于是如果没有草堆就直接退出. 代码 #include<bits/stdc++.h> #define rap(i,first,last) for(int i=first;i<=last;++i) using namespace std; const int move_x[9]={233,0,0,1,-1,1,1,-1,-1}; const int move_y[9]={233,1,-1,0,0,1,-1,1,-1}; set<pair<int,int> >_map;//用来记录这张图 set<pair<int,int>

LeetCode 1254.封闭岛屿的周长(BFS)

China☆狼群 提交于 2019-12-21 00:31:38
注意:原题是求封闭岛屿数量,我改成了求封闭岛屿的周长 /** * @Author: Wilson79 * @Datetime: 2019年12月16日 星期一 22:41:13 * @Filename: 1254.封闭岛屿的周长.cpp */ const int N = 120 ; typedef pair < int , int > PII ; # define x first # define y second PII q [ N * N ] ; bool st [ N ] [ N ] ; int bfs ( int sx , int sy , vector < vector < int >> & grid ) { int flag = 1 ; int n = grid . size ( ) , m = grid [ 0 ] . size ( ) ; int hh = 0 , tt = 0 ; q [ 0 ] = { sx , sy } ; st [ sx ] [ sy ] = true ; int cnt = 0 ; while ( hh <= tt ) { auto t = q [ hh ++ ] ; int dx [ ] = { 1 , - 1 , 0 , 0 } , dy [ ] = { 0 , 0 , 1 , - 1 } ; for ( int i = 0 ; i <

C# 面向对象:封装、继承、多态

一曲冷凌霜 提交于 2019-12-17 01:54:47
面向对象有封装、继承、多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反应来完成任务。这种编程方法提供了非常强大的多样性,大大增加了代码的重用机会,增加了程序开发的速度,将具备独立性特制的程序代码包装起来,修改部分程序代码时不至于会影响到程序的其他部分。 1.封装 每个对象都包含它进行操作所需要的所有信息,封装只公开代码单元的对外接口,而隐藏其具体实现,尽量不对外公开代码。使用封装有很多好处,从设计角度来讲,封装可以对外屏蔽一些重要的信息,比如使用电脑的人只要知道怎么使用电脑就可以,不用知道这些功能具体是怎么实现的;从安全性考虑,封装使对代码的修改更加安全和容易,封装明确的指出了哪些属性和方法是外部可以访问的,这样当需要调整这个类的代码时,只要保证公有属性不变,公有方法的参数和返回值类型不变,那么就可以尽情的修改这个类,而不会影响到程序的其他部分;封装还避免了命名冲突的问题,封装有隔离作用,不同的类中可以有相同名称的方法和属性,但不会混淆,也可以减少耦合。 2.继承 继承可以使用现有类的所有功能,并在无须重新编写原来的类的情况下,对这些功能进行扩展。使用继承而产生的类被称为派生类或子类,而被继承的类则称为基类或超类或父类。继承表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数,其子类是对父类的扩展

2 实现函数 cv2.approxPloyDP

。_饼干妹妹 提交于 2019-12-07 17:17:01
凸形状内部的任意两点的连线都应该在形状里面。 1 道格拉斯-普克算法 Douglas-Peucker algorithm 这个算法在其他文章中讲述的非常详细,此处就详细撰述。 下图是引用维基百科的。ε称之为阈值 shreshold 图一 静态图如下: 具体详细的可以参考如下两篇文章。 相关文章如下: 道格拉斯-普克 抽稀算法 附javascript实现 ,该文章只看他的文字讲解就好,他的代码不是通过python实现的。 道格拉斯-普克算法(Douglas–Peucker algorithm) ,该文章讲的也比较详细。 Ramer-Douglas-Peucker算法 ,维基百科的名词诠释 2 实现函数 cv2.approxPloyDP 作用:对目标图像进行(按指定精度、阈值,两者是一个概念)进行近似多边形曲线拟合。 使用一个较少顶点的曲线/多边形去拟合一个顶点较多的曲线/多边形,两曲线/多边形间的距离小于或等于某一指定精度/阈值 cv2.approxPolyDP(curve, epsilon, closed) -> approxCurve 参数: curve - 2D点矢量,为图像的 “ 轮廓 ” 值。 epsilon - 指定近似精度的参数ε,这是原始曲线与其近似值之间的最大距离。参数越小,两直线越接近 closed - 若为true,曲线第一个点与最后一个点连接形成闭合曲线

P1027 三角形的周长

匿名 (未验证) 提交于 2019-12-03 00:15:02
有n根棍子,棍子i的长度为Ai。现在想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大周长,若无法组成三角形则输出0。 第一行是一个正整数n(3<=n<=1000000),代表有n根棍子。 第二行有n个正整数,第i个正整数Ai代表第i根棍子的长度。 如果能组成三角形,则输出最长周长,如果不能组成三角形,输出0。 5 2 3 4 5 10 12 来源:博客园 作者: problems 链接:https://www.cnblogs.com/problems/p/11758692.html

LeetCode 463 岛屿的周长

匿名 (未验证) 提交于 2019-12-03 00:04:02
网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。 示例 : 输入: [[0,1,0,0], 输出: 16 解释: 它的周长是下面图片中的 16 个黄色的边: 解法一 最常规的解法,如果走到1的位置,我们便判断该位置的情况,先附一个初值,然后根据每一种特殊情况减去1,得到的结果添加到总的结果中: class Solution: def islandPerimeter(self, grid: List[List[int]]) -> int: res = 0 for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j]==1: plus = 4 if i>0 and grid[i-1][j]==1: plus-=1 if i<len(grid)-1 and grid[i+1][j]==1: plus-=1 if j>0 and grid[i][j-1]==1: plus-=1 if j<len(grid[0])-1 and grid[i][j+1]=