在已知线段中找出回路的最快方法?

Kvci 2006-07-27 10:16:29
有N条线段,其端点坐标保存在数组中,怎么样快速找出这些线段围成的回路?
例如线段保存在x[N][2],y[N][2]中
x[i][0],y[i][0]是第i条线段的第一个端点
x[i][1],y[i][1]是第i条线段的第二个端点
现在要找出其中的线段形成的回路
怎么找?

...全文
389 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kvci 2006-07-29
  • 打赏
  • 举报
回复
不好意思
没描述清楚
所有线段是已经处理过的
线段只会在端点处相交
且一旦有回路,回路之间是不会相交或重叠的
其实就是要找出所有的闭合曲线来
我再填充颜色
对于没有闭合的不需要填充
zzwu 2006-07-29
  • 打赏
  • 举报
回复
...
直到找到一个边,它的尾端和第一边的首端相连,就得到一个回路,
zzwu 2006-07-29
  • 打赏
  • 举报
回复
那就更容易些了:
从任何一边开始,依此进行边到相连边的搜索,
直到找到一个边,它和尾端和第一边的首端相连,就得到一个回路,
如果找完所有边都找不到下一根相连边,又不能和第一根边相接,则结果为不封闭的折线,
重复以上过程,直到所有边用完.

实现时可用一点小技巧,如
*已经用去的边从原来的边的集合中去掉,
*先排序,再搜索,
等.
AFIC 2006-07-28
  • 打赏
  • 举报
回复
两个斜着的8字,不过我说也许,因为比较牵强。
zzwu 2006-07-28
  • 打赏
  • 举报
回复
为什么说15个?
zzwu 2006-07-28
  • 打赏
  • 举报
回复
这一问题在csdn中以前讨论过.
方法就是利用邻接关系,从任何一点开始,依此进行点-边-点-边-点...的搜索,
直到找到一个点,它和搜索路径中先前出现的某个点相重,就得到一个回路.
对各种不同的路径进行完整的搜索,就可得到所有不同的回路.
但这些回路有可能相同,如abc,bca,cab,代表同一回路,
如不考虑方向,则bac,acb,cba也和上面3个回路是同一回路,
从所有回路中可以找出所有最小回路,也就是回路内不包含其它回路的回路.
它们中常常是最感兴趣的回路.

AFIC 2006-07-28
  • 打赏
  • 举报
回复
…………
恩,也许还是15个。
老了,不中用了……
zzwu 2006-07-28
  • 打赏
  • 举报
回复
田字所包含的回路数目还不只9个,而是13个.
AFIC 2006-07-28
  • 打赏
  • 举报
回复
如果重复怎么办?
比如线段围成的最终图形是一个 田 字形,
那所谓的回路将有9个,你到底要哪个?
Kvci 2006-07-28
  • 打赏
  • 举报
回复
0.12.2
zzwu 2006-07-28
  • 打赏
  • 举报
回复
这种说法确实比较牵强了。

33,026

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧