bueno, tengo que hacer este problema:
y realize este codigo:
Código
#include <iostream>
struct acSTR
{
int cuadro[1000][1000];
};
void check(unsigned long long *cont, acSTR &scene, int dir, int x, int y, int pasx, int pasy)
{
int copy[y][x], i, j;
scene.cuadro[pasy][pasx] = 1;
*cont += 1;
for(i=0;i<y;i++)
for(j=0;j<x;j++)
copy[i][j] = scene.cuadro[i][j];
switch(dir)
{
case 00:
if(scene.cuadro[pasy][pasx+1]==-1)
{
check(cont, scene, dir, x, y, pasx+1, pasy);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
if(scene.cuadro[pasy+1][pasx]==-1)
{
dir = 01;
check(cont, scene, dir, x, y, pasx, pasy+1);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
break;
case 01:
if(scene.cuadro[pasy+1][pasx]==-1)
{
check(cont, scene, dir, x, y, pasx, pasy+1);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
if(scene.cuadro[pasy][pasx-1]==-1)
{
dir = 10;
check(cont, scene, dir, x, y, pasx-1, pasy);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
break;
case 10:
if(scene.cuadro[pasy][pasx-1]==-1)
{
check(cont, scene, dir, x, y, pasx-1, pasy);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
if(scene.cuadro[pasy-1][pasx]==-1)
{
dir = 11;
check(cont, scene, dir, x, y, pasx, pasy-1);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
break;
case 11:
if(scene.cuadro[pasy-1][pasx]==-1)
{
check(cont, scene, dir, x, y, pasx, pasy-1);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
if(scene.cuadro[pasy][pasx+1]==-1)
{
dir = 00;
check(cont, scene, dir, x, y, pasx+1, pasy);
for(i=0;i<y;i++)
for(j=0;j<x;j++)
scene.cuadro[i][j] = copy[i][j];
}
break;
}
}
int main()
{
unsigned long long count = 0;
int x, y, i, j;
std::cin >> y >> x;
acSTR cuadro;
for(i=0;i<y;i++)
for(j=0;j<x;j++)
cuadro.cuadro[i][j]=-1;
check(&count, cuadro, 00, x, y, 0, 0);
std::cout << count%1000000000 ;
return 0;
}
el codigo funciona en cualquier caso, pero el problema es que si M y N <= 10 no pasa de un segundo en encontrar la solucion, pero si le pongo mas, se tarda mas de un segundo en hayar la respuesta

he aqui mi duda:
Como optimizarian este codigo para que en casos de 100 * 100 tardase menos de un segundo en encontrar todas las posibles espirales?
Saludos










Autor



En línea








