计算条件字符串分区

时间:2017-03-12 18:29:53

标签: java algorithm

我需要帮助编写一个程序来计算可以由满足属性的字母网格组成的分区数量:

  • 分区必须只包含两个字母(因此,如果网格包含字母A,B和C,则分区只能容纳其中两个字母)
  • 两个字母中的一个必须彼此相邻(这意味着我们必须能够横向移动整个区域仅向上/向下/向左/向右移动)
  • 第二个字母必须包含在两个或多个地区
  • 分区不得包含在任何其他分区中(这意味着分区的子集也不能满足分区的属性)
  • 如有必要,分区可以是整个网格。

输入是尺寸为N x N的网格。我在第一行给出N.

**Example:** 
***
*Input:*

4
ABBC
BBBC
AABB
ABBC

***
*Output*
2
****

在这个例子中,第一行“4”告诉我们接下来会有一个4x4网格输入。输出 2 由可以满足上述属性的子网格的数量确定。 在此示例中,两个子网格是:

ABB
BBB
AAB
ABB

***
and
***
BC
BC
BB
BC
***

请注意,两个子网格只包含两个不同的字符。

在第一个子网格中,我们只能向上/向下/向左/向右移动所有'B'字符。有两个'A'区域。因此,属性得到满足

在第二个子网格中,我们可以横切所有'B'字符。我们无法横穿所有'C'字符。因此,属性得到满足。

由于有两个子网格,输出 2

我的想法

我开始阅读尺寸并在网格中循环。这是我现在的代码:

import java.io.*;
import java.util.*;
public class partition  {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);      
        int dimensions = scan.nextInt();
        for (int i = 0 ; i  < dimensions; i++) {
            for (int j = 0  ; j < dimensions; j++ ) {

            }
        }
    }
}

我认为将所有字符读入数组可能是一种很好的方法,但我不确定如何从那里开始。有人可以给我一些建议吗?我相信提出一个有效的算法将是最困难的部分。

0 个答案:

没有答案