Azulejos rojos y negros

Descripción del Título

Hay una sala rectangular cubierta con azulejos cuadrados. Cada teja está pintada de rojo o negro. Un hombre se para sobre una baldosa negra, desde allí puede moverse a una de las cuatro fichas adyacentes, pero no puede moverse al ladrillo rojo, solo al ladrillo negro. Escribe un programa para contar la cantidad de ladrillos negros que puede pasar repitiendo el movimiento anterior.

ingresar

La entrada contiene múltiples conjuntos de datos. La fila inicial de un conjunto de datos contiene dos enteros positivos W y H. W y H representan respectivamente el número de columnas y filas de la habitación rectangular, y no exceden de 20.
Cada conjunto de datos tiene H filas, y cada fila contiene W caracteres. El significado de cada carácter es el siguiente:
'.'- ladrillo negro
' # '- ladrillo rojo
' @ '- hombre (solo una vez en cada conjunto de datos)
dos ceros indican el final de la entrada.

Producción

Para cada conjunto de datos, el programa debe generar una línea que contenga el número de mosaicos que un hombre puede alcanzar desde el mosaico inicial.

Entrada de muestra

6 9 
.... #. 
..... # 
...... 
...... 
...... 
...... 
...... 
# @ ... # 
. # .. #. 
11 9. 
# .......... 
#. #######. 
. #. # ..... #. 
. #. #. ###. #. 
. #. # .. @ #. #. 
. #. #####. #. 
. # ....... #. 
. #########. 
........... 
11 6 
.. # .. # .. # .. 
.. # .. # .. # .. 
.. # .. # .. ### 
.. #. . # .. # @. 
.. # .. # .. # .. 
.. # .. # .. # .. 
7 7 
.. #. # .. 
.. #. # .. 
###. ### 
... @. .. 
###. ### 
.. #. # .. 
.. #. # .. 
0 0

Salida de muestra

45 
59 
6 
13
代码:
import java.util.Scanner;
public class 瓷砖 {
    static char map[][]=new char[501][501]; //存储数组
    static int dis[][]=new int[501][501];  //标记数组
    static int b[][]={
    
    {1,0},{-1,0},{0,-1},{0,1}};
    static int n,m,ans=0;
    static void dfs(int x,int y){
        dis[x][y]=1; //当前位置标记为1
    	for(int i=0;i<4;i++){
    		int xx=x+b[i][0];
    		int yy=y+b[i][1];
    		if(xx<0 || yy<0 || xx>=m || yy>=n )continue;
    		if(map[xx][yy]!='.'||dis[xx][yy]==1)continue;
    		ans++;//如果程序到这,说明此处为黑瓷砖,加1
    		dfs(xx,yy);
    	}
}
public static void main(String[] args) {
		// TODO Auto-generated method stub
       Scanner scan=new Scanner(System.in);
       while(scan.hasNext()){
       n=scan.nextInt(); //列
       m=scan.nextInt();//行
       if(n==0 && m==0) break;
       int x=0,y=0;
       ans=1;
       for(int i=0;i<m;i++){ //每次先清空map和dis数组!!!
    	   for(int j=0;j<n;j++)
    		   {map[i][j]='0';
    	        dis[i][j]=0;
    		   }
       }
       for(int i=0;i<m;i++){
    	   String s=scan.next();
    	   for(int j=0;j<n;j++){
    		  map[i][j]=s.charAt(j);
    	      if(map[i][j]=='@'){
    	    	  x=i;
    	    	  y=j;
    	      }
    	   }
       }
       dfs(x,y);//从此位置搜索
       System.out.println(ans);
       }
}
}


Supongo que te gusta

Origin blog.csdn.net/xq66660821/article/details/78387685
Recomendado
Clasificación