在一個 4X4 大小的囚房中,關著一個身高 3 的囚犯。這個囚犯因為後背受傷,所以睡覺時必定側臥且將雙手伸長,形成一個 3X2 的「 L 」形狀;但是囚房內經常會堆放一些不可移動的障礙物,所以這個囚犯必須在囚房內找出可以用「 L 」形姿勢睡臥的空間。
現在要你寫一個程式,幫這個囚犯找出共有幾個可以睡臥的姿勢。以下圖為例,黑色方塊表示障礙物,而這個囚犯能睡臥的的空間以白色空格表示,在圖中囚犯在上邊連續空白處有 1 個可睡臥空間,在下邊連續空白處有 2 個可睡臥空間。
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] arr =new int [8][8]; //擴充陣列
int sum=0;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
arr[i][j]=1;
for(int i=2;i<6;i++)
for(int j=2;j<6;j++)
arr[i][j]=sc.nextInt();
for(int i=2;i<6;i++)
for(int j=2;j<6;j++){
if(arr[i][j]==0){
if(arr[i-1][j]==0){ //up
if(arr[i-1][j+1]==0 && arr[i-1][j+2]==0){
//System.out.println("up-right");
sum++;
}
if(arr[i-1][j-1]==0 && arr[i-1][j-2]==0){
//System.out.println("up-left");
sum++;
}
}
if(arr[i+1][j]==0){ //down
if(arr[i+1][j+1]==0 && arr[i+1][j+2]==0){
//System.out.println("down-right");
sum++;
}
if(arr[i+1][j-1]==0 && arr[i+1][j-2]==0){
//System.out.println("down-left");
sum++;
}
}
if(arr[i][j+1]==0){ //right
if(arr[i-1][j+1]==0 && arr[i-2][j+1]==0){
//System.out.println("right-down");
sum++;
}
if(arr[i+1][j+1]==0 && arr[i+2][j+1]==0){
//System.out.println("right-up");
sum++;
}
}
if(arr[i][j-1]==0){ //left
if(arr[i-1][j-1]==0 && arr[i-2][j-1]==0){
//System.out.println("left-down");
sum++;
}
if(arr[i+1][j-1]==0 && arr[i+2][j-1]==0){
//System.out.println("left-up");
sum++;
}
}
}
}
System.out.println(sum);
}
}