区域的个数(坐标离散化)

始终觉得秋叶拓哉书上那段代码,没有起到离散化的作用啊?估计是我智障吧。。。肯定是。

compress 后的 X,Y 坐标绘制的 field 和原来的地图一样啊。到底为森么呢?到底为森么呢?

import pprint

def compress( li1, li2, size, nums ):
    vec  = []
    vec1 = []

    for i in xrange( nums ):
        for d in xrange( -1, 2 ):
            temp1, temp2 = li1[i] + d, li2[i] + d
            if 1 <= temp1 <= size:
                vec.append( temp1 )
            if 1 <= temp2 <= size:
                vec.append( temp2 )

    vec.sort()

    for v in vec:
        if len( vec1 ) == 0:
            vec1.append( v )
        else:
            if vec1[-1] != v:
                vec1.append( v )

    li1[:] = map( lambda x: vec1.index( x ), li1 )
    li2[:] = map( lambda x: vec1.index( x ), li2 )

    return len( vec1 )

X1 = [1, 1,  4,  9, 10]
X2 = [6, 10, 4,  9, 10]
Y1 = [4, 8,  1,  1, 6]
Y2 = [4, 8,  10, 5, 10]

W = H = 10
N = 5

field = [ [ 0 for w in xrange( W ) ] for h in xrange( H ) ]

compress( X1, X2, W, N )
compress( Y1, Y2, H, N )

pprint.pprint( zip( zip( X1, Y1 ), zip( X2, Y2 ) ) )

for i in xrange( N ):
    for y in xrange( Y1[i], Y2[i] + 1 ):
        for x in xrange( X1[i], X2[i] + 1 ):
            field[y][x] = 1

for i in xrange( W ):
    for j in xrange( H ):
        print field[i][j],
    print
时间: 2024-10-27 17:54:28

区域的个数(坐标离散化)的相关文章

【坐标离散化】

坐标离散化 (来自<挑战程序设计竞赛>P164)给出题目和主体代码: 题目:区域的个数w*h的格子上画了n条或垂直或水平的宽度为1的直线.求出这些线将格子划分了多少个区域(w和h的范围都为[1, 1e6],n的范围为[1,500]) 思路:一般先想到的是类似水塘问题的处理,建立数组并深度优先搜索但是这个问题中w和h最大为1000000,所以没办法创建w*h的数组.因此我们要使用坐标离散化这一技巧 将前后没有变化的行列(意思是消除后不会影响区域个数的)相除后并不会影响区域的个数数组里只需要存储有

OpenCV统计米粒数目-计算联通区域的个数及联通区域内像素的个数

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 基于对话框的程序. 实现界面: 打开图片的消息响应函数: void CcountRiceDlg::OnBnClickedOpen() { // TODO: 在此添加控件通知处理程序代码 TCHAR szFilters[]=_T("BMP Files (*.bmp)|*.png|All Files (*.*)|*.*||")

己知矩形两对角点坐标,计算矩形区域内所有坐标

时不时要用到求坐标,原来写过又忘了,重写一次备忘 private string getAllPoint(Point p1, Point p2)        {            string info = "";            int minNumX = 0;            int minNumY = 0;            for (int i = 0; i < Math.Abs(p2.X - p1.X) + 1; i++)            { 

【坐标离散化】AOJ0531- Paint Color

日文题--一开始被题目骗了以为真的要写文件? 题目大意&&解答戳:? 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 #include<vector> 7 #include<queue> 8 using namespace std; 9 int w,

hihoCoder#1079(线段树+坐标离散化)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去,有些海报就会被其他社团的海报所遮挡住.看到这个场景,小Hi便产生了这样的一个疑问——最后到底能有几张海报还能被看见呢? 于是小Ho肩负起了解决这个问题的责任:因为宣传栏和海报的高度都是一样的,所以宣传栏可以被视作长度为L的一段区间,且有

坐标离散化处理

<pre name="code" class="cpp">#include <bits/stdc++.h> using namespace std; #define maxn 505 typedef pair<int, int> P; int W, H, N; int X1[maxn], X2[maxn], Y1[maxn], Y2[maxn]; bool fld[maxn][maxn]; int d[2][4] = {{-1,

坐标离散化

int compress(int *x1,int *x2,int w){ vector<int> xs; for(int i=0;i<N;i++){ for(int d=-1;d<=1;d++){ int tx1=x1[i]+d,tx2=x2[i]+d; if(1<=tx1&&tx1<=w) xs.push_back(tx1); if(1<=tx2&&tx2<=w) xs.push_back(tx2); } } sort(xs

[Swift]LeetCode323. 无向图中的连通区域的个数 $ Number of Connected Components in an Undirected Graph

Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to find the number of connected components in an undirected graph. Example 1: 0          3 |          | 1 --- 2    4 Given n = 5 and

坐标离散化注意点

1.获得有几个不同的点&获得点在数组中的位置(为了从1开始计数): int totalX = unique(keyX.begin(), keyX.end()) - keyX.begin(); p[i].x = lower_bound(keyX.begin(), keyX.begin() + totalX, p[i].x) - keyX.begin() +1; len1 = unique(b + 1, b + 1 + len1) - (b + 1); p[i].x = lower_bound(b