
05.06.2008, 17:34
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
хммм .... классы тут как-то боком!
их придется впихивать совсем без их преимуществ
давай набросаю суть а ты ее засунешь хоть в классы , хоть в мусорку!
будем обозначать символами
a-кресло(arm chair)
c-стул(chair)
t-стол(table)
s-шкаф(shelves)
Код:
#defane MAX_STEPS 50
char a[3][3]; //третий ряд забит нулями
char steps[MAX_STEPS][7];
char rez[3][3];
int abs(int numb) // просто извращаюсь...
{
if(numb<0)
return numb*(-1);
else
return numb;
}
void step(int step,int pusto_x,int pusto_y)
{ // step -текущая глубина рекурси
// pusto_x - координата пустого места
// pusto_y - координата пустого места
int i,j,k;
if(steps<MAX_STEPS-1)
{
for(i=0;i<2;i++)
for(j=0;j<3;j++)
if(i!=pusto_y || j!=pusto_x) // проверяю чтоб счетчики
// не совпадали с пустой клеткой
if(i==pusto_y || j==pusto_x) // проверяю на условие движения
if(abs(pusto_x-j)==1) // через клетку не прыгать
{
// могем менять местами
a[pusto_y][pusto_x]=a[i][j];
a[i][j]=' '; // передвигаю чегото
for(k=0,fl=0;k<MAX_STEPS && k<step && fl==0;k++)
if(strcmp(a,rez)==0) // проверяю не встречалось ли
fl=1; // данное расположение
if(strcmp(a,rez)==0) // проверяю не получили ли мы то что
{ // нужно достичь
// вываливай весь steps
// хоть в файл хоть на печать
fl=1;
}
if(fl==0)
{
strcpy((char *)&steps[step][0],a); // записываю ход
step(step+1,j,i); // уход в глубь
// стирать ход не нужно поскольку ПЕРЕЗАПИСЬ
}
a[i][j]=a[pusto_y][pusto_x]; // востанавливаю предыдущее
a[pusto_y][pusto_x]=' '; // состояние
}
}
else
return ; // возврат если перебор по глубине
}
void main()
{
int i,j;
// подготавливаем массивы
for(i=0;i<MAX_STEPS;i++)
strcpy((char *)&steps[i][0],"");
a[0][0]='t'; // исходный массив
a[0][1]='c';
a[0][2]='s';
a[1][0]='c';
a[1][1]=' ';
a[1][2]='a';
a[2][0]=0; // забиваем нулями для того чтобы
a[2][1]=0; // сформировалась идентифицирующая строка
a[2][2]=0;
rez[0][0]='t'; // массив который нужно получить
rez[0][1]='c';
rez[0][2]='a';
rez[1][0]='c';
rez[1][1]=' ';
rez[1][2]='s';
rez[2][0]=0; // забиваем нулями с целью как и
rez[2][1]=0; // для массива a
rez[2][2]=0;
steps(0,1,1);
}
КОД НЕ ПРОВЕРЯЛ!!! БИЛ ПРЯМО В ОКНО СООБЩЕНИЙ!
ну мне простительно у меня репутация маленькая 
да и решение таких задач тут дешево стоит!
Последний раз редактировалось Delimiter; 06.06.2008 в 16:31..
|
|
|