/*
【监视器】
某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开。
给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器。
输入描述
第一行输入m,n表示长宽,满足1 < m,n <= 20;
后面输入m行,每行有n个0或1的整数,整数间使用一个空格隔开,表示该行已停车情况,其中0表示空位,1表示已停。
输出描述
最少需要打开监控器的数量
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
3 3
0 0 0
0 1 0
0 0 0
输出
5
样例说明
中间1的位置上需要打开监视器,且其上下左右皆需要打开监视器,共5个。
*/
let arrinput = ["4 3", "0 1 0 0", "1 1 1 0", "0 1 0 0"];
let length = +arrinput[0].split(" ")[0]; //获取停车场长度,即每项数组的长度
let width = +arrinput[0].split(" ")[1]; //获取停车场宽度,即总的数组的长度
let arr = arrinput.slice(1); //截出停车场
arr.forEach((item, index) => (arr[index] = item.split(" "))); //将每一项字符串分割为数组
console.log("------最初停车场------");
for (let item of arr) {
console.log(item);
}
arr.forEach((item, index) => {
item.forEach((n, i) => {
item[i] = +n;
if (n == 1) {
//如果当前为1,则将其上、下、左、右(不是1,即0或者2)以及自己变2,最后统计2的数目即总的摄像头数量
item[i] = 2;
if (index - 1 >= 0) {
arr[index - 1][i] = 2;
} //上变2
if (index + 1 <= width - 1 && arr[index + 1][i] != 1) {
arr[index + 1][i] = 2;
} //下变2
if (i - 1 >= 0) {
item[i - 1] = 2;
} //左变2
if (i + 1 <= length - 1 && item[i + 1] != 1) {
item[i + 1] = 2;
} //右变2
}
});
});
let count = 0;
arr.forEach((item, index) => {
item.forEach((n, i) => {
if (n == 2) {
count++;
}
});
});
console.log("-----总的需要的摄像头------");
console.log(count);
console.log("------现在停车场------");
for (let item of arr) {
console.log(item);
}