【算法求助】如何从数组里算出整体个数,请进来看图

问题描述

如何通过算法算出这个里面包含了三个整体?

解决方案

解决方案二:
三个整体是啥意思?看你就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
解决方案十二:
在准确一点的名字“连通域标记算法”

时间: 2024-12-08 03:14:33

【算法求助】如何从数组里算出整体个数,请进来看图的相关文章

用PHP程序实现从数组里筛选出重复的数据

用PHP程序实现从数组里筛选出重复的数据 <?php$num = count($array);if($num){sort($array);}if($num!=0){$m = $array[0];$n = 0; $kind=1;echo $array[0]."----------";for($z=0;$z<$num;$z++){  if($m!=$array[$z])  {     echo $array[$z-1]." ";    echo $array

PHP实例:从数组里筛选出重复的数据

该PHP实例是从数组中选出重复数据的方法 以下为引用的内容: <?php$num = count($array);if($num){sort($array);}if($num!=0){$m = $array[0];$n = 0; $kind=1;echo $array[0]."----------";for($z=0;$z<$num;$z++){  if($m!=$array[$z])  {     echo $array[$z-1]." ";    e

如何算出N个数的比例

问题描述 例如有个listlist.add(10)list.add(12)list.add(14)得出5:6:7只有一个元素则是1 解决方案 解决方案二:这就是找最大公约数吗,百度代码,都现成的解决方案三:stringresult=string.Empty;List<int>temp_list=newList<int>{10,12,14,16,18};intpublic_num=1;intmin_num=temp_list.Min();for(inti=min_num;i>0

java-有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合?

问题描述 有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合? 最近遇到一道java算法题,给定一个数组,求出数组里任意个数相加等于一固定数值,求出所有可能性的任意数字组合?求解答,用最原始的算法做出这道题,求大神指点,大神给出答案? 解决方案 /** * * @param arr * 数组 * @param num * 固定值 * @return 组合 */ public static List a(int[] arr, int num) { List strLis

求助一道算法题,关于数组算法

问题描述 求助一道算法题,关于数组算法 有一个字符串数组{"用户1,商品1,200","用户2,商品2,100","用户3,商品1,300","用户4,商品3,50","用户5,商品3,50"},写的方法需要返回的是{"用户2,商品2","用户3,商品1","用户4,商品3"}也就是说比较下每种商品的最高价格是谁,并返回谁买了,如果价格相同取最先买

java-把数据+类型写入字节数组里这个程序总错,求大神指出错的地方,或者给出正确的代码,感激不尽

问题描述 把数据+类型写入字节数组里这个程序总错,求大神指出错的地方,或者给出正确的代码,感激不尽 package 处理流; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import

怎么算一个数组里含不含某个元素呀?

问题描述 比如:string[]str1=newstring[]{"100","200"};stringstr2="100";怎么知道str1里边有没有str2元素,1.0的SDK谢谢 解决方案 解决方案二:foreach(stringsinstr1){if(s==str2){messagebox.show("Y");break;}}解决方案三:foreachstr3asstringinstr1Ifstr3=str2thenf

代码-C++编程 算法 求助!!!

问题描述 C++编程 算法 求助!!! 在一篇英文文章中,输入一个字母,请输出与该字母一起出现频率最高的三个字母.如:输入s,可能和s一起出现频率最高的就是t,e.....想知道算法!!!如果可以,可以给个代码作为参考吗?非常谢谢 解决方案 之前回答过你的问题.和计算出现频率最高的字母其实类似,只不过那个只需要一个向量保存结果,这个需要一个矩阵,保存字母转移关系.最后统计输出.要代码,请采纳. 解决方案二: 我的想法是这样: 建立一个代表字母的数组a[300],比如a[A]表示A出现的次数. 那

java-一个简单的小算法求助

问题描述 一个简单的小算法求助 找出一个数组中既不是最大的数也不是最小的数,我的java代码如下(错误的): class NotMM{ public void NotMM(int arr[]){ int mid = arr[0]; for(int i=0;i<arr.length-2;i++){ if(arr[i+1]>arr[i]&&arr[i+1]<arr[i+2]){ mid = arr[i+1]; }else if(arr[i+1]<arr[i]&&