算法找到最大的区域

use*_*872 10 java algorithm graph

................................
.XXXXXXXXXXXXXXX.....XXXXXXXXXX.
.X.....X.......X.....X........X.
.X.....X.......XXXXXXX........X.
.XXXXXXXXXXXX.................X.
.X....X.....X.................X.
.X....X.....XXXX..............X.
.XXXXXX........X..............X.
......X........X..............X.
......X........X..............X.
......X........X..............X.
......XXXXXXXXXXXXXXXXXXXXXXXXX.
................................
Run Code Online (Sandbox Code Playgroud)

寻找一种算法来寻找最大的区域.这里,"区域"被定义为由Xs限定的点数(.).

   private static void readFile(File inputFile) throws IOException {

    Scanner fileScanner = new Scanner(inputFile);

    Point previousPoint = null;

    int rowCount = 0;
    while(fileScanner.hasNext()){
        String line = fileScanner.next();

        String[] points = line.split(" ");

        for(int columnCount=0;columnCount<points.length;columnCount++){

            if(points[columnCount].equalsIgnoreCase("x")){
                Point currentPoint = new Point();
                currentPoint.setxValue(columnCount);
                currentPoint.setyValue(rowCount);
            }
        }

        rowCount++;
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是我的第一次,并且正在努力进一步前进.

Cru*_*her 10

这个算法应该工作.您只需要在Java中实现它.

  1. 将文件加载到char [] [].(每行1个字符[])
  2. 循环遍历char [] [](2维)
    1. 找到'.'后,执行洪水填充,更改所有'.' 到',',也在每次改变时增加一个计数器.
    2. 在洪水填充结束时,将此计数器与全局设置的最大值进行比较.如果它更高,则将其设置为新的最高值.(如果边缘不是合适的边界,那么如果在填充过程中通过在3中设置标记到达边缘,则不要设置此计数器)
  3. 返回你设置的最高值.

如果您对Java实现有任何特定问题,请告诉我

Geobits:

注意:如果要排除任何框"外部"区域,请照常填充,但在填充期间丢弃任何撞击边缘的区域(跳过该洪水的步骤2.2).

在进行填充填充时,您有两种类型的边界.墙('X')和数组的边缘(您需要显式检查以避免OutOfBounds异常).如果你超出界限,继续进行填充,但设置一个标志,以便您稍后知道不考虑最大盒子的数量.