area maxima

Iniciado por mapers, 10 Septiembre 2010, 07:10 AM

0 Miembros y 1 Visitante están viendo este tema.

mapers

hola de nuevo por aca ,me dejaron hacer este problema es sobre como calcular la maxima extension que tiene  una area ....

Especificación de entrada

La primera línea de entrada contiene un T entero, el número de casos de prueba seguir.

Cada caso de prueba comienza con un entero N (1 <= n <= 10) que indica el tamaño de la tierra cuadrícula. El próximo N líneas cada una contiene caracteres N. Cada personaje ser '.' (Área libre) o '#' (obstáculo). Su casa debe ser construida en zona libre.
Especificación de salida

Para cada caso de prueba, la producción de una línea del tamaño de la plaza más grande en la zona de libre.


Ejemplo de entrada

2
10
..........
.#####....
..#..###..
...##.....
...#..#...
...#...###
....######
..........
##########
#########.
5
##..#
....#
.#..#
####.
.#..#
Ejemplo de salida

3
2


estuve pénsando como poder implementarlo y maso menos tengo una idea osea tomo el primer elemento de la fila. Si está vacío, tomo el segundo, si está vacío, entonces me fijo en la segunda fila a ver si hasta el segundo elemento está vacío. Si es así tomo el tercer elemento de la primer fila, si éste es vacío, me fijo en la segunda y tercer fila si está vacío hasta el tercer elemento... y así sucecivamente
cuando no encuentro un vacío, el cuadrado máximo está en el número anterior...
ahora mi problema es como controlar los bucles  para poder hacer esto .......publlicare mi codigo cuando lo tenga casi listo ..por lo ptonto queria algunas ideas de como poder implementarlo mejor .......


O podria hacerlo los 10 casos independientes  ................verdad


cambie el . por el 1 y el # por el 0  y codifique esto pero no me  convence

Código (cpp) [Seleccionar]

#include<iostream.h>
#define FIL 10
#define COL 10

void leermatriz(int m[][COL],int f, int c)
{
    int i=0,j=0;
    for(i=0;i<f;i++)
        for(j=0;j<c;j++)
            {
                cout<<"MATRIZ"<<i<<"]["<<j<<"]";
                cin>>m[i][j];
            }
}

void imprimir(int m[][COL],int f, int c)
{
    int j=0,i=0;
    for(i=0;i<f;i++)
    {   for(j=0;j<c;j++)           
                cout<<m[i][j]<<"  ";
                cout<<endl;
           
            }
}
int areamaxima(int m[][COL],int f, int c)
{
    int i=0,j=0,matrizdedos=0,y=0,x=0;
    for(i=0;i<f;i++)
    {  for(j=0;j<c;j++)
            {
               if(m[i][j]==1)
               {
                    x++;
                }   
                    if(m[i+1][j]==1)
                    {
                        y++;
                    }
                    if(m[i][j]==0 ||m[i+1][j]==0)
                    {
                       if(x==y)
                       {
                            matrizdedos++;
                        }
                    }
            }
    }
    return matrizdedos++;
       
}


int main()

{
int m[FIL][COL],f=0,c=0;
cout<<"INGRSE MATRIZ"<<endl;
cout<<"NUMERO DE FILAS"<<endl;
cin>>f;
cout<<"NUMERO DE COLUMNAS"<<endl;
cin>>c;
leermatriz(m,f,c);
imprimir(m,f,c);
cout<<areamaxima(m,f, c);
system("pause");
   
}

}


aki trato de obtener las matrizes de dos por dos .........pero no me controla los saltos cuando encuentra un 0 (#)     una ayudita ........... porque de hay nomas lo sacaria para la de 3 por 3 la de 4 por 4 la de 5 por 5 pero creo que seria mejor meterlo en un case.......