0

我需要从控制台读取一些对象。这有点像用 C 编写的战舰游戏。想想我有一个 6x6 数组的平台。我从用户那里获取用户输入,char 'X' 表示它是二维数组中的阴影区域。我正在为 36 个位置分配字符。用户给出输入后的数组示例是;

0,0                       0,6      

  X              XXX
 X                X  
   XX             X 
     X




6,0                       6,6

抱歉输出不太清楚。这是用户输入的X个字符的输出。两组中的'x'字符是联合的,所以图中有2个对象。我需要计算数量组。X 字符的方向不能是对称的,所有的事情都是可能有一组 x 字符是联合的,我想计算这些组

4

1 回答 1

1

将问题建模为图形(正如您已经理解的那样):G=(V,E)V您的网格在哪里(或者x更准确地说只有 's),以及E = { (u,v) | there is X in both u and v }

在解析期间,将所有坐标保存在一个容器中,并将每个坐标映射到一个布尔值,指示它是否被访问过。

现在,在仍有未访问过的 x 时重复:
运行一个图发现算法(BFS是一个例子)从此(未访问过)x,并标记x在发现算法运行期间遇到的所有访问过的

迭代次数(调用 BFS 的次数)是组数。

于 2012-08-08T14:09:54.223 回答