Big Bomb(矩阵周边变化)
给你一个只有0与1的矩阵,当你释放一个炸弹进这个矩阵时候,若旁边有1则连锁Bomb,将1置换成0
点击查看代码
public class Boom
{
public static int BigBoom(int[][] m,int row,int col)
{
if(m==null) return 0;
int h=m.Length;
int w=m[0].Length;
int count=0; //记录还剩下多少炸弹
m[row][col]=0;
Queue<int> q=new Queue<int>();
q.Enqueue(row);
q.Enqueue(col);
int[][] dict=new int[][]
{
new int[]{-1,0},
new int[]{1,0},
new int[]{0,-1},
new int[]{0,1}
};
while(q.Count>0)
{
int curr=q.Dequeue();
int curc=q.Dequeue();
foreach (var e in dict)
{
int nr=curr+e[0];
int nc=curc+e[1];
if(nr>=0&&nr<h&&nc>=0&&nc<w)
{
if(m[nr][nc]==1)
{
m[nr][nc]=0;
q.Enqueue(nr);
q.Enqueue(nc);
}
}
}
}
for(int r=0;r<h;r++)
{
for(int c=0;c<w;c++)
{
count+=m[r][c];
}
}
return count;
}
}
Program.cs
class Test
{
static void Main(string[] arg)
{
int[][] m=new int[][]
{
new int[]{0,1,1,0,0},
new int[]{1,1,1,0,0},
new int[]{1,1,0,0,0},
new int[]{0,1,1,0,0},
new int[]{0,0,1,0,0},
new int[]{0,0,1,1,1},
};
View(m);
var result=Boom.BigBoom(m,0,4);
View(m);
System.Console.WriteLine(result);
}
static void View(int[][] a)
{
foreach (var item in a)
{
System.Console.WriteLine(string.Join(",",item));
}
}
}

浙公网安备 33010602011771号