收费公路重建问题(可发现所有同度点集)C语言

  同度点集,就是产生相同的距离集合,但却是不同点集的那些点集.

这个东西,整个白天都在想.到现在,也不是很清楚.但,代码写出来了,回溯部分总是不自信的感觉.

  核心的思想就是:传递给例程一个数组指针,之后用一个 static int 类型变量保存点集的个数.即每次使集合为空,就执行 count++ ;

  无论是否成功产生点集,都进行回溯.通过对决策树的分析,在每次调用 place () 结束之后,都通过上一个点集的内容对 distance 进行恢复.主要的逻辑障碍就在这里了.哎,不深扣了,扣不起啊.

  因为是寻找所有的可能,所以可能会有重复的点集出现.

  注释写得很烂,最近有看英语跟数学.

  好吧,帖.!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,你可以使用GEOS库来获取一个geometry对象的缓冲区的外框点集。 以下是获取一个点的缓冲区外框点集的示例代码: ```c #include <geos_c.h> int main() { // 初始化GEOS库 initGEOS(NULL, NULL); // 创建一个点 GEOSCoordSequence* coords = GEOSCoordSeq_create(1, 2); double x = 0.0, y = 0.0; GEOSCoordSeq_setX(coords, 0, x); GEOSCoordSeq_setY(coords, 0, y); GEOSGeometry* point = GEOSGeom_createPoint(coords); // 获取缓冲区 double distance = 10.0; int quadsegs = 8; GEOSGeometry* buffer = GEOSBuffer(point, distance, quadsegs); // 获取外框点集 GEOSGeometry* envelope = GEOSEnvelope(buffer); GEOSCoordSequence* envelope_coords = GEOSGeom_getCoordSeq(envelope); int num_points = 0; GEOSCoordSeq_getSize(envelope_coords, &num_points); double* points = (double*) malloc(num_points * sizeof(double) * 2); GEOSCoordSeq_getOrdinate(envelope_coords, 0, 0, &points[0]); GEOSCoordSeq_getOrdinate(envelope_coords, 0, 1, &points[1]); for (int i = 1; i < num_points; i++) { double x, y; GEOSCoordSeq_getOrdinate(envelope_coords, i, 0, &x); GEOSCoordSeq_getOrdinate(envelope_coords, i, 1, &y); points[i*2] = x; points[i*2+1] = y; } // 打印外框点集 printf("Envelope points:\n"); for (int i = 0; i < num_points; i++) { printf("(%f, %f)\n", points[i*2], points[i*2+1]); } // 释放内存 free(points); GEOSGeom_destroy(point); GEOSGeom_destroy(buffer); GEOSGeom_destroy(envelope); GEOSCoordSeq_destroy(coords); // 结束GEOS库 finishGEOS(); } ``` 此代码使用GEOS库来创建一个点,获取该点的缓冲区,然后获取缓冲区的外框点集并打印出来。你可以根据需要修改代码以适应其他类型的geometry对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值