广搜
第一行输入四个数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);
}
}
作者:Better又
出处:https://www.cnblogs.com/lwyy1223-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。