我有一组矩形,我想"减少"这个集合,所以我有最少的矩形来描述与原始集合相同的区域.如果可能的话,我希望它也快,但我更关心的是尽可能减少矩形的数量.我现在有一种方法,大部分时间都可以使用.
目前,我从最左上角的矩形开始,看看我是否可以在保持矩形的同时向右和向下展开它.我这样做,直到它不能再展开,删除并拆分所有相交的矩形,并在列表中添加展开的矩形.然后我再次使用下一个左上角的矩形开始该过程,依此类推.但在某些情况下,它不起作用.例如:

使用这组三个矩形,正确的解决方案最终会有两个矩形,如下所示:

但是,在这种情况下,我的算法从处理蓝色矩形开始.这会向下扩展并分割黄色矩形(正确).但是当处理黄色矩形的剩余部分时,它不是向下扩展,而是首先向右扩展并收回先前分离的部分.然后处理最后一个矩形,它不能向右或向下扩展,因此保留原始的矩形集.我可以调整算法,先向下扩展然后向右扩展.这将解决这种情况,但它会在翻转的类似场景中导致同样的问题.
编辑:只是为了澄清,原始的矩形集不重叠,不必连接.如果连接了矩形的子集,则完全覆盖它们的多边形可以在其中具有孔.
我试图在PyCharm中从控制台读取一个字符(不按回车键),但无济于事.函数会msvcrt.getch()停止代码,但不会对按键(甚至输入)作出反应,并且msvcrt.kbhit()始终返回0.例如,此代码不会打印任何内容:
import msvcrt
while 1:
if msvcrt.kbhit():
print 'reading'
print 'done'
Run Code Online (Sandbox Code Playgroud)
我使用的是Windows 7,PyCharm 3.4(闲置时也是如此).
怎么了?有没有其他方法可以在没有输入的情况下读取输入?
我试图使用Exchange Web服务来访问日历数据,但我似乎无法弄清楚如何访问已被其他用户共享日历时,这不是他们的默认日历.假设在我公司其他用户创建的共享日历,并与我分享它,我甚至无法找到日历文件夹,更遑论在它获得的项目.
这些问题的答案可以在EWS托管API(版本1.0或1.1)而言,服务对象直接,或甚至只是需要被发送到服务器的SOAP消息的XML主体.我只需要某种起点.任何帮助将不胜感激.
exchange-server calendar exchangewebservices ews-managed-api
我有一个包含TreeView的程序.除根之外的所有节点和根目录下的两个节点都是从数据库加载的.
当用户将数据添加到数据库时,它必须自动添加到TreeView中.我可以通过清除所有节点,添加默认节点并将包括新数据在内的所有数据添加到我的TreeView中来成功完成此操作,但新TreeView的所有节点都已折叠.
我们的客户希望保留所有扩展节点,但仍然添加他刚刚添加的新数据.有没有办法知道所有扩展节点并在折叠或刷新后再次展开?谢谢你的回复.
我有一个带公式的电子表格应用程序.我正在寻找检测公式中循环引用的最佳算法.当我使用公式的长链计算时,我当前的方法很慢并且使用了太多的内存.它涉及为每个公式保留所有家属的集合.因此,如果第一列单元格中的每一个都有一个公式,并且引用了之前的单元格,则第一个单元格的集合将为空.第二个单元格的集合只包含第一个单元格,第三个单元格的集合将包含单元格1和2,...,第1000个单元格的集合将包含之前的999个单元格.引入新公式时,将构建其依赖项集,如果集合包含新公式,则存在循环引用.但显然,对于这种情况,所需的时间和内存呈指数增长.