function getEmptyArea(r,c,arr){
let entryXY= []
for(let x = 0;x<c;x++){
for(let y = 0;y<r;y++){
if(y === 0 || y === r-1 || x === 0 ||x === c-1){
if((arr[y] && arr[y].split('')[x]) === 'o'){
entryXY.push([x,y])
}
}
}
}
let areaArr =[]
let allArea=[]
for(let i = 0; i<entryXY.length ; i++){
let relateX = []
relateX.push(entryXY[i])
let n = 0
for(let x= 0 ; x<relateX.length ; x++){
let newNode = getEmptyItem(arr,relateX[x][0],relateX[x][1],c,r)
if(newNode && newNode.length>0){
for(let z = 0 ;z<newNode.length ; z++){
let isRepate = relateX.filter((item)=>{return item[0] === newNode[z][0] && item[1] === newNode[z][1]})
if(isRepate === undefined ||isRepate.length<=0){
relateX.push(newNode[z])
}
}
}
}
allArea.push(relateX)
}
console.log('空区域:'+JSON.stringify(allArea))
let newArea=[]
if(allArea && allArea.length>0){
for(let entryTime = 0;entryTime<allArea.length;entryTime++){
let areaMsg = allArea[entryTime]
let entryNumber = 0
for(let cell = 0;cell<areaMsg.length;cell++){
if(areaMsg[cell][1] === 0 || areaMsg[cell][1] === r-1 || areaMsg[cell][0] === 0 ||areaMsg[cell][0] === c-1){
entryNumber++
}
}
if(entryNumber <=1){
newArea.push(areaMsg)
}
}
}
newArea.sort(function (a,b){a.length-b.length})
console.log("--------------------------------")
console.log("排序后的单入口区域"+newArea)
if(newArea && newArea.length>0 ){
for(let z=0;z<newArea.length;z++){
if(newArea[z][0].length === newArea[0][0].length){
console.log("最大单入口区域开始行坐标:" + newArea[z][0][1]+"入口列坐标:"+newArea[z][0][0]+"区域大小"+newArea[z].length)
}
}
}else{
console.log("不存在最大单入口区域")
}
}
function getEmptyItem (arr,x,y,c,r){
let emptyItem = []
if(0<(x+1)<c){
let nodeMsg = arr[y]
let row = nodeMsg ?nodeMsg.split(''):[]
if(row[x+1] === 'o'){
emptyItem.push([x+1,y])
}
}
if(0<(x-1)<c){
let nodeMsg = arr[y]
let row = nodeMsg ?nodeMsg.split(''):[]
if(row[x-1] === 'o'){
emptyItem.push([x-1,y])
}
}
if(0<(y+1)<r && y< arr.length ){
let nodeMsg = arr[y+1]
let row = nodeMsg ?nodeMsg.split(''):[]
if(row[x] === 'o'){
emptyItem.push([x,y+1])
}
}
if(0<(y-1)<r && y-1< arr.length){
let nodeMsg = arr[y-1]
let row = nodeMsg ?nodeMsg.split(''):[]
if(row[x] === 'o'){
emptyItem.push([x,y-1])
}
}
return emptyItem
}
getEmptyArea(5,4,['xxxx','xooo','xxxx','xooo','xxxx'])