城堡是一个4×4的方格,为了保卫城堡,现需要在某些格子里修建一些堡垒。 城堡中的某些格子是墙,其余格子都是空格,堡垒全只能建在空格里:每个堡垒都可以向上下左右四个方向射击,如果两个堡垒在同一行或同一列,且中间没有墙相隔,则两个堡垒都会把对方打掉。问对于给定的一种状态,最交能够修建几个堡垒。 输入: 每个测例以一个整数n (1<=1<=4)开始,表示城堡的大小。接下来是n行字 符每行n个,‘×’表示该位置是墙,‘•’表示该位置是空格。n 等于0标志输入结束。 输出: 每个测例在单独的一行输出一个整数:最多修建堡垒的个数。 用Java代码实现
时间: 2024-03-12 10:47:00 浏览: 165
基于Unity3D实现的守卫城堡小游戏-固定路线(类似保卫萝卜)
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
int n = scanner.nextInt();
if (n == 0) {
break;
}
char[][] castle = new char[n][n];
for (int i = 0; i < n; i++) {
castle[i] = scanner.next().toCharArray();
}
int maxDefense = getMaxDefense(castle);
System.out.println(maxDefense);
}
scanner.close();
}
private static int getMaxDefense(char[][] castle) {
int n = castle.length;
int maxDefense = 0;
for (int i = 0; i < (1 << n * n); i++) {
boolean[][] defense = new boolean[n][n];
int numDefense = 0;
for (int j = 0; j < n * n; j++) {
if ((i & (1 << j)) != 0) {
int x = j / n;
int y = j % n;
if (castle[x][y] == '×') {
break;
}
defense[x][y] = true;
numDefense++;
}
}
if (numDefense <= maxDefense) {
continue;
}
boolean[][] shot = new boolean[n][n];
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
if (castle[x][y] == '×') {
shot[x][y] = true;
continue;
}
if (defense[x][y]) {
for (int i1 = x - 1; i1 >= 0 && castle[i1][y] != '×'; i1--) {
if (defense[i1][y]) {
break;
}
shot[i1][y] = true;
}
for (int i1 = x + 1; i1 < n && castle[i1][y] != '×'; i1++) {
if (defense[i1][y]) {
break;
}
shot[i1][y] = true;
}
for (int j1 = y - 1; j1 >= 0 && castle[x][j1] != '×'; j1--) {
if (defense[x][j1]) {
break;
}
shot[x][j1] = true;
}
for (int j1 = y + 1; j1 < n && castle[x][j1] != '×'; j1++) {
if (defense[x][j1]) {
break;
}
shot[x][j1] = true;
}
}
}
}
boolean allShot = true;
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
if (castle[x][y] == '•' && !defense[x][y] && !shot[x][y]) {
allShot = false;
break;
}
}
if (!allShot) {
break;
}
}
if (allShot) {
maxDefense = numDefense;
}
}
return maxDefense;
}
}
```
阅读全文