问题描述
如何通过算法算出这个里面包含了三个整体?
解决方案
解决方案二:
三个整体是啥意思?看你就0和1啊
解决方案三:
无非就是这样:遍历每个点如果这个点是1如果这个点周围有值为1的点将这两个点合并
解决方案四:
引用1楼starfd的回复:
三个整体是啥意思?看你就0和1啊
我的意思是,1所在的位置因为相邻,构成了一个整体。图上能看到1构成了三个区域
解决方案五:
引用2楼shingoscar的回复:
无非就是这样:遍历每个点如果这个点是1如果这个点周围有值为1的点将这两个点合并
嗯,怎么样算合并啊?在数组中
解决方案六:
引用2楼shingoscar的回复:
无非就是这样:遍历每个点如果这个点是1如果这个点周围有值为1的点将这两个点合并
如果是上下相邻呢?
解决方案七:
数组里有上下这个概念吗二维数组?!
解决方案八:
引用6楼u014022118的回复:
数组里有上下这个概念吗二维数组?!
嗯,相当于图像像素点的处理
解决方案九:
参考里面的AllowDragDrop方法,通过每个位置的上下左右进行查找,然后已经找到的位置放入一个集合,以便后面循环时先从这个集合里排除之前已经找过的位置
解决方案十:
引用4楼panpanainia的回复:
Quote: 引用2楼shingoscar的回复:
无非就是这样:遍历每个点如果这个点是1如果这个点周围有值为1的点将这两个点合并嗯,怎么样算合并啊?在数组中
元素可以定义成publicElement{publicintm_value;publicintm_group;}
初始的时候group都是0然后有个全局的方法来获取group的编号intg_group=0;publicintAllocGroupId(){return++g_group;}
//遍历每个点Elemente=array[x,y];//如果这个点是1if(e.value==1&&e.group==0)e.group=AllocGroupId();//如果这个点周围有值为1的点foreach(Elemente2inAround(e)){if(e2.value==1){//将这两个点合并if(e2.group>0)e.group=e2.group;elsee2.group=e.group;}}
解决方案十一:
判定有一行有多少个连续的1,有简单的方法(这个自己百度把,博客园可是喜欢炫耀这个技巧滴)然后把两行数据或一下,在判定有多少个连续1的如果不清楚算法那么请百度“连通域判定”,这也是博客园喜欢炫技的常见领域,你绝对能找到需要的东西如果是项目上用,我们可能就直接使用opencv直接搞了。当然算法上曾经有个帖子有过基本玩票算法你可以参考(当然这个都是基于8方向迭代的,不是上面说的直接矩阵运算)http://bbs.csdn.net/topics/360212984
解决方案十二:
在准确一点的名字“连通域标记算法”