1
« en: Jueves 7 de Octubre de 2010, 06:12 »
recorridos de platos en php es un proyecto q tengo q hacer aguien tiene alguna idea como se puede hacer o algun codigo en el q me pueda basar
se los agradecere mucho y es para el 7 de octubre 2010 bueno por su atencion y respuestas gracias.
tengo un codigo en .cc i lo quiero pasar a php
pero tengo muchas dudas con muchas funciones y variables para saber como las establesco en php
lo dejo para q lo chequen.
#include "stdlib"
#include <iostream>
#include <cstdlib>
#include <list>
#define X 6
#define Y 5
using namespace std;
enum modos{CONDICIONADO,NO_CONDICIONADO};
struct Vector{
int x;
int y;
};
class Recorrido{
enum espacios{ARRIBA, ABAJO, DERECHO, IZQUIERDO};
enum vacancias{LIBRE, OCUPADO};
enum colocaciones{HORIZONTAL, VERTICAL,INDIFERENTE};
int numLlenos;
int modo;
int colUltimoMov;
list<Vector> camino;
int plato[X][Y];
bool libre(Vector posActual,int lugar,int col){
if(((posActual.x>=X-1) && (lugar==DERECHO))
|| ((posActual.y>=Y-1) && (lugar==ABAJO))
|| ((posActual.x<=0) && (lugar==IZQUIERDO))
|| ((posActual.y<=0) && (lugar==ARRIBA))
|| ((lugar==ARRIBA) && (plato[posActual.x][posActual.y-1]==OCUPADO))
|| ((lugar==ABAJO) && (plato[posActual.x][posActual.y+1]==OCUPADO))
|| ((lugar==DERECHO) && (plato[posActual.x+1][posActual.y]==OCUPADO))
|| ((lugar==IZQUIERDO) && (plato[posActual.x-1][posActual.y]==OCUPADO))
|| (((lugar==ARRIBA)||(lugar==ABAJO)) && (col==VERTICAL))
|| (((lugar==DERECHO)||(lugar==IZQUIERDO)) && (col==HORIZONTAL)))
return false;
return true;
}
Vector mover(Vector vpos,int pos){
Vector npos=vpos;
if(pos==ARRIBA) npos.y-=1;
else if(pos==ABAJO) npos.y+=1;
else if(pos==DERECHO) npos.x+=1;
else if(pos==IZQUIERDO ) npos.x-=1;
return npos;
}
bool hayCaminoCol(Vector posPrueba,int colAnterior){
if(colAnterior!=INDIFERENTE){
if(colAnterior==VERTICAL) colUltimoMov=HORIZONTAL;
else if(colAnterior==HORIZONTAL) colUltimoMov=VERTICAL;
}
plato[posPrueba.x][posPrueba.y]=OCUPADO;
numLlenos++;
cout<<"mayor: "<<numLlenos<<" pos x: "<<posPrueba.x<<"-"<<posPrueba.y<<endl;
if(numLlenos<(Y*X)){
for(int i=0;i<4;i++){
if(libre(posPrueba,i,colUltimoMov)){
Vector posHipotetica=mover(posPrueba,i);
if(hayCaminoCol(posHipotetica,colUltimoMov)){
camino.push_front(posPrueba);
return true;
}
}
}
if(colAnterior!=INDIFERENTE){
if(colAnterior==VERTICAL) colUltimoMov=HORIZONTAL;
else if(colAnterior==HORIZONTAL) colUltimoMov=VERTICAL;
}
plato[posPrueba.x][posPrueba.y]=LIBRE;
numLlenos--;
return false;
}
camino.push_front(posPrueba);
return true;
}
public:
Recorrido(void){
for(int i=0;i<X;i++)
for(int j=0;j<Y;j++)
plato[j]=0;
numLlenos=0;
colUltimoMov=INDIFERENTE;
}
bool hayCamino(Vector posPrueba){
return hayCaminoCol(posPrueba,INDIFERENTE);
}
bool hayCaminoCond(Vector posPrueba){
if(hayCaminoCol(posPrueba,HORIZONTAL))
return true;
cout<<endl;
if(hayCaminoCol(posPrueba,VERTICAL))
return true;
return false;
}
void mostrar(){
list<Vector>::iterator i;
for(i=camino.begin(); i != camino.end(); ++i)
cout<<(*i).x<<"-"<<(*i).y<<endl;
}
};
int main(void){
Vector posInicial;
cout<<"Escoge un plato"<<endl<<"x: ";
cin>>posInicial.x;
cout<<"y: ";
cin>>posInicial.y;
Recorrido *rec=new Recorrido();
if(rec->hayCaminoCond(posInicial)){
rec->mostrar();
}
else
cout<<"No existe una solución posible";
delete rec;
return EXIT_SUCCESS;
}
se llama la mosca pegajosa hace el recorrido de una matriz de 5x5 y se ve pero como ya comente quiero pasarlo aphp
si alguien sabe como se los agradesere q me lo diga