Java 在二维阵列中查找封闭区域
所以我正在编写一个游戏,其中一个角色向4个方向移动,无论它移动到哪里,它都将坐标存储在500x700维的二维数组中 如果字符移动到坐标5,10,则数组[5][10]将设置为1。否则,0 我想在这个数组中找到一个矩形的封闭区域。我该怎么做呢?我不知道,我已经尝试了所有的尝试和错误,但有人能帮我吗?提前谢谢你 编辑**** 假设我有一个10x10的2D阵列:Java 在二维阵列中查找封闭区域,java,arrays,2d,Java,Arrays,2d,所以我正在编写一个游戏,其中一个角色向4个方向移动,无论它移动到哪里,它都将坐标存储在500x700维的二维数组中 如果字符移动到坐标5,10,则数组[5][10]将设置为1。否则,0 我想在这个数组中找到一个矩形的封闭区域。我该怎么做呢?我不知道,我已经尝试了所有的尝试和错误,但有人能帮我吗?提前谢谢你 编辑**** 假设我有一个10x10的2D阵列: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
我的问题是,当周围有一个1的矩形时,我将如何搜索它
例如:
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 0 0 0 0 1 0 0 0
0 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
从[1][1]开始的1应检测为区域42的矩形。6宽7长
我尝试的是用for循环遍历数组,然后每当有1时,搜索长度和高度,并确定是否存在于另一侧,在距离n的位置相同的长度。这样做是否恰当?什么是更有效的解决方案?试试以下方法:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Integer[][] intArray = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
int highestFreq = 0;
List<Integer> freqList = new ArrayList<Integer>();
for(Integer[] intArrays : intArray ){
List<Integer> arrays = Arrays.asList(intArrays);
int freq = Collections.frequency(arrays, 1);
if(freq > highestFreq){
highestFreq = freq;
}
if(freq > 0){
freqList.add(freq);
}
}
Integer count = 0;
for( Integer ints : freqList.subList(1, freqList.size()-1 )){
if(ints.equals(freqList.get(1))){
count += 1;
}
if(count == freqList.size() - 2){
System.out.println(highestFreq * freqList.size());
//prints 48
}
};
}
}
请张贴你尝试过的内容,以及你认为失败的原因。还有,你所说的矩形封闭区域是什么意思?这个阵列是如何设置的?每行都是一个子数组吗?@Bryan:这是一个2D数组。所以基本上你是对的。