Java 如何使用递归在二维数组中标记组?
我需要在代码中编写一个方法,该方法可以获取二维数组并返回数组中有多少不同的组。组被定义为“在上/下/左/右(非对角线)方向上直接连接到其他单元格的所有单元格”,其中数组中的单元格用星号表示。我需要编写一个遍历整个数组的方法,该方法还调用一个递归方法,将每个星号更改为该组特有的字母。例如,这是一个示例输入:Java 如何使用递归在二维数组中标记组?,java,arrays,recursion,multidimensional-array,Java,Arrays,Recursion,Multidimensional Array,我需要在代码中编写一个方法,该方法可以获取二维数组并返回数组中有多少不同的组。组被定义为“在上/下/左/右(非对角线)方向上直接连接到其他单元格的所有单元格”,其中数组中的单元格用星号表示。我需要编写一个遍历整个数组的方法,该方法还调用一个递归方法,将每个星号更改为该组特有的字母。例如,这是一个示例输入: char图像[][]={ {'*','*',' ',' ',' ',' ',' ',' ','*',' '}, {' ','*',' ',' ',' ',' ',' ',' ','*',' '
char图像[][]={
{'*','*',' ',' ',' ',' ',' ',' ','*',' '},
{' ','*',' ',' ',' ',' ',' ',' ','*',' '},
{' ',' ',' ',' ',' ',' ','*','*',' ',' '},
{' ','*',' ',' ','*','*','*',' ',' ',' '},
{' ','*','*',' ','*',' ','*',' ','*',' '},
{' ','*','*',' ','*','*','*','*','*','*'},
{' ',' ',' ',' ',' ',' ',' ',' ','*',' '},
{' ',' ',' ',' ',' ',' ',' ',' ','*',' '},
{' ',' ',' ','*','*','*',' ',' ','*',' '},
{' ',' ',' ',' ',' ','*',' ',' ','*',' '}};
输出结果如下:
aa b
a b
cc
d ccc
dd c c c
dd cccccc
c
c
eee c
e c
我主要需要迭代给定图像的方法的帮助,因为我不知道如何使代码区分组。您的概念应该是这样的
checkField (x, y, char)
x,y is out of bounds; return;
if current field has asterix do
current field = char; // Prevents new checks!
checkField (x+1, y, char); // right field
checkField (x+-1,y, char); //l left field
// top and bottem field.
else do
// Advance to next Field; Next field has to be in bounds. At the end of the line you have to go to the next line;
checkField( .., ..., char++)
end;
第一个调用是checkField(0,0,'a')代码>
您需要创建一个新的字符数组。这将是一个实例变量
可以将x,y矩阵建模为数组。其中x mod y是一条线。这将使进步更容易。但不那么直观
尝试实现伪代码,并随时详细更新您的问题。您需要两种方法。一个用来迭代给定的图像,另一个用给定的名称在点(i,j)上画星号
迭代给定的图像非常简单
public char[]iterateThrough(char[]image,int行,int列){
//这就是结果。
字符[][]输出=新字符[][行];
//用“\0”填充结果
对于(int i=0;i|
现在,这是如何绘制星号
public void drawAsterisk(char[][]图像,char[][]结果,int i,int j,char name,int行,int列){
//如果点(i,j)属于星号,则在点(i,j)处绘制
如果(图像[i][j]='*'){
结果[i][j]=名称;
//右转
如果(i+1<行){
drawAsterisk(图像、结果、i+1、j、名称、行、列);
}
//左转
如果(i-1>=0){
drawAsterisk(图像、结果、i-1、j、名称、行、列);
}
//打底
如果(j+1<列){
drawAsterisk(图像、结果、i、j+1、名称、行、列);
}
//平顶
如果(j-1>=0){
drawAsterisk(图像、结果、i、j-1、名称、行、列);
}
}
}
提示:迭代数组,找到内容“*”后,分配一个标签并检查它是否连接到4个相邻单元格(可以使用递归检查方法),用相同的标签标记任何相邻单元格。如果没有发现更多单元格正在连接,则继续迭代。保留一个组中已有单元格的列表,这样您就不会重新检查或标记它们。