去哪儿笔试:座位安排问题
题目描述
假设一个教室有m * n 个座位,每个座位上可以座一个学生。前提是座位没有坏掉,没坏的座位用’.’表示,坏掉的座位用’x’表示。
现在要在这个教室安排考试,由于坐在(x,y)位置上的同学能够抄到(x-1,y-1)、(x-1,y+1)、(x,y-1)、(x,y+1)的同学,所以要把他们分开安排。现在让我们计算出,这个教室能够最多安排多少人。
输入样例
2 3
…
…
输出样例
4
思路
从左上角的位置开始安排
- 首先判断是不是坏掉的座位,如果是则不能安排人
- 然后判断能不能抄袭到别人
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
sc.nextLine();
char[][] arr = new char[m][n];
for(int i = 0; i < m; i++) {
String line = sc.nextLine();
char[] c = line.toCharArray();
for(int j = 0; j < n; j++) {
arr[i][j] = c[j];
}
}
int[][] dp = new int[m+2][n+2];
int count = 0;
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
if(arr[i-1][j-1] == 'x') { // 如果座位坏掉了
continue;
}
// 判断能不能抄袭到别人
if(dp[i-1][j-1] == 0 &&
dp[i-1][j+1] == 0 &&
dp[i][j-1] == 0 &&
dp[i][j+1] == 0) {
dp[i][j] = 1;
count++;
}
}
}
for(int i = 0; i <= m; i++) {
for(int j = 0; j <= n; j++) {
System.out.print(dp[i][j]+" ");
}
System.out.println();
}
System.out.println(count);
}
}