第一行輸入四個數n m sx sy,分別表示n行m列,起始點sx,sy,在n行m列中,有0-9的數字,0表明不能走,其他任何數字均可以走,求從起始點上下左右相鄰點依次延申可以到達多少個點。
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class G寶島探險 {
static int [][]vis=new int [51][51];
static int [][]map=new int [51][51];
static int []dx= {1,0,-1,0};
static int []dy= {0,1,0,-1};
static int sum=0;static int n=0;
static int m=0;static int sx;static int sy;
static Queue<Integer>qx=new LinkedList<Integer>();
static Queue<Integer>qy=new LinkedList<Integer>();
static Scanner in=new Scanner (System.in);
public static boolean inmap(int x,int y)
{
return(x>=1&&x<=n&&y>=1&&y<=m);
}
public static void bfs(int x,int y)
{
while(!qx.isEmpty())
{
for(int i=0;i<4;i++)
{
int xx=qx.peek()+dx[i];
int yy=qy.peek()+dy[i];
if(inmap(xx,yy)&&vis[xx][yy]!=1&&map[xx][yy]!=0)
{
sum++;
vis[xx][yy]=1;
qx.offer(xx);
qy.offer(yy);
}
}
qx.poll();
qy.poll();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
n=in.nextInt(); m=in.nextInt();
sx=in.nextInt();sy=in.nextInt();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
map[i][j]=in.nextInt();
}
}
qx.offer(sx);
qy.offer(sy);
sum=1;
vis[sx][sy]=1;
bfs(sx,sy);
System.out.println(sum);
}
}