在Java字符行中查找形状
我在思考如何从字符行中获取形状时遇到了一个问题,例如,给定以下输入:在Java字符行中查找形状,java,arrays,list,count,shape,Java,Arrays,List,Count,Shape,我在思考如何从字符行中获取形状时遇到了一个问题,例如,给定以下输入: AAAAAAAA ABBBAABA ABABABBB ABBBAAAA AAAABBAA ABBABBAA ABBABBAA ABAABBAA 任务: 计算有多少形状是由水平或垂直相邻的“B”字母构成的。 在这个例子中有4个这样的形状。 如果我删除“A”,可能更容易看到: BBB B B B BBB BBB BB BB BB BB BB B BB 其他任务: 每个形
AAAAAAAA
ABBBAABA
ABABABBB
ABBBAAAA
AAAABBAA
ABBABBAA
ABBABBAA
ABAABBAA
任务:
计算有多少形状是由水平或垂直相邻的“B”字母构成的。
在这个例子中有4个这样的形状。
如果我删除“A”,可能更容易看到:
BBB B
B B BBB
BBB
BB
BB BB
BB BB
B BB
其他任务:
每个形状中有多少个“B”字符?
在本例中:8、4、5、8(不按任何特定顺序)
我对Java还是新手,所以我想问,是否有任何Java函数可以检查彼此相邻的相同事件,以便计算形状出现的次数?希望你能给我一些关于如何构造这个算法的建议。
(我曾想取“B”的每个索引,并检查它们是否接近其他“B”,但我被卡住了)int indexCount=0;
ArrayList=新建ArrayList();
对于(int a=0;a
方法indexof(int-ch)
返回字符串中一个共享字符的第一个索引。在得到第一个B的索引后,应该剪切每个字符串
或者您可以使用indexOf(int ch,int fromIndex)
返回指定字符第一次出现时该字符串内的索引,从指定索引开始搜索
我对Java还是新手,所以我想问,是否有任何Java函数可以检查彼此相邻的相同事件,以便计算形状出现的次数
不,没有内置的功能使这非常容易。
这就是练习的重点
以下是一些可用于解决此问题的示例方法:
- :
- 将输入转换为矩阵。它可以是一个
,您可以在其中设置boolean[][]
,其中输入为true
B
- 迭代矩阵中的值,跳过
值false
- 当发现
值时,启动泛洪填充:true
- 增加形状数(您发现了一个新形状)
- 递归地将所有相邻的
值替换为true
,并在执行时递增false
计数shapeSize
- 当所有
邻域(以及邻域的邻域,等等)都替换为true
时,将充分探索形状false
- 继续停止的迭代,直到找到另一个
值true
- 将输入转换为矩阵。它可以是一个
- 图论:发现
- 将输入转换为无向图:
- 每个字符的索引可以是顶点id
- 为输入中相邻的
对创建连接B
- 在图的顶点上迭代
- 如果某个顶点还没有组件id,请使用深度优先搜索查找与其连接的所有顶点,将下一个组件id指定给所有顶点,同时递增
计数componentSize
- 当不再有连接的顶点时,将完全探索形状
- 继续停止的迭代,直到找到另一个没有组件id的顶点
- 将输入转换为无向图:
- :这类似于查找连接的组件
indexCount=array[a].indexOf('B',indexCount+1);列表。添加(索引计数)代码>非常感谢您的回复。我解决了我的问题,它类似于洪水填充法。再次感谢!
int indexCount = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
for(int a = 0; a < count; a++) {
indexCount = array[a].indexOf('B');
list.add(indexCount);
}
System.out.println(list);