我正在尝试重新创建魔棒工具,它可以选择形状中的所有内容。红色框定义形状,蓝色是用户点击的位置,如图1所示:我有用户点击x, y
的位置代码,并假设它们是像素数据。
图1。
我有一个二维数组,例如一个例子:
var boxes = [
[0,0,0,0,0,0,0,0,0,0],
[0,0,1,1,1,1,0,0,0,0],
[1,1,0,0,0,0,1,0,0,0],
[1,0,0,0,0,0,0,1,0,0],
[1,0,0,0,0,0,0,1,0,0],
[1,1,1,0,0,0,0,1,0,0],
[0,0,0,1,1,1,1,0,0,0],
]
$("main").on("mousedown", function(e)
{
var offset = $(this).offset();
var x = e.pageX-offset.left;
var y = e.pageY-offset.top;
// ...
});
<小时/> 我可以使用哪种最佳算法将圆形状中的所有
0
转换为2
?我可以使用Javascript的示例代码吗?
答案 0 :(得分:1)
function floodFill(boxes, x_click, y_click) {
var cells = [], x=x_click, y = y_click, arr=boxes.slice(0), hei=arr.length, wid=arr[0].length;
function check(y,x){
if(arr[y][x]==0){arr[y][x]=2;cells.push({x:x,y:y})}
}
if (arr[y][x]==1){return arr;}
cells.push({x:x,y:y});
arr[y][x]==2;
while(cells.length!=0){
var cell=cells.slice()[0];
cells.shift();
if(cell.y>0){
check(cell.y-1,cell.x);
}
if(cell.y+1<hei){
check(cell.y+1,cell.x)
}
if(cell.x>0){
check(cell.y,cell.x-1);
}
if(cell.x+1<wid){
check(cell.y,cell.x+1)
}
}
return arr;
}
完全摆弄你的例子:http://jsfiddle.net/Dz9nY/1/