#2 05.06.07 21:13
Re: Помогите с лабой по рекурсии.(1 курс) - СРОЧНО
держи
/*----------------Лабораторная работа №3.4-------------
2. Условие задачи:
Реализовать рекурсивный алгоритм построения цепочки из имеющегося
набора костей домино.
3. Описание алгоритма:
На входе программа получает значение половины кости - hf.
mk - признак 'выставленности'(0/1). num - индекс в паре(0/1).
Если функция domino() пробегает весь "массив костей", то возвращается единица -
ограничитель рекурсии. Функция предусматривает переворачивание костей.
4. Текст программы с комментариями: */
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
//--------------------
int ct[][2]={{2,3},{4,5},{1,2},{6,2},{4,3},{3,1},{5,6},{-1,-1}}; // исходный набор
// костей домино
int mk[80]; // метка
//--------------------
int domino (int hf) // hf - половина кости домино
{
int i;
for (i=0; ct[i][0]!=-1; i++) // пока есть невыставленные
if (mk[i]==0) break;
if (ct[i][0]==-1) return 1;
for (i=0; ct[i][0]!=-1; i++)
{
if (mk[i]==1) continue; // если выставленная, то продолжаем
if (hf != ct[i][0] && hf != ct[i][1]) continue; // ищем подходящую кость
mk[i]=1; // !!! нашли !!!
int num=0; // индекс в паре
if (hf==ct[i][0]) num=1;
if (domino(ct[i][num])) // рекурсивный вызов
{
cout <<ct[i][num]<<":"<<ct[i][!num]<<" ";
return 1;
}
mk[i]=0;
}
return 0;
}
//----------------------
void main ()
{
int k,l;
cout <<"----Recursia-----\n\n";
cout <<"Before - ";
for (l=0;ct[l][0]!=-1;l++)
{
printf ("%d:",ct [l][0] );
printf ("%d ",ct[l][1] );
}
printf ("%c\n");
cout <<" After - ";
for (k=0; k!=9 && !domino (k); k++);
getch ();
}
я с АМ, а ты?не с моего потока?
Исправлено antonoff (05.06.07 21:14)
Offline
#7 11.06.07 23:34
Re: Помогите с лабой по рекурсии.(1 курс) - СРОЧНО
need help,
need help написал(а):
ТАК ЧТО НЕ ХЕР ЛЕЗТЬ СО СВОИМИ ВЫВОДАМИ !!! :-(=)
1. не ори!
2. не матерись!
3. чё лезишь в чужой разговор?
или коль пост создал, можешь всех на х"р посылать?
ЗЫЖ по-аккуратнее с имоциями, они могут доставить тебе массу хлопот.
Offline
#8 12.06.07 00:51
Re: Помогите с лабой по рекурсии.(1 курс) - СРОЧНО
need help,
1) А что тут догонять? Пока одни разбираются и тренируют мозг, другие водку/пиво пьют и на учёбу забивают. А когда гусь жареный клюнет, начинают канючить.
2) "На халяву" - менталитет пост-советского сознания. Пора бы привыкнуть, что умственная работа тоже имеет цену.
3) На подобные темы отвечать не интересно. Если кто кинет задачу интересную, то тогда всегда пожалуйста. Или, хотя бы, часть решения. Если человек сам пытается что-то сделать, но попадает в ступор, то ему всегда помогут. Ибо видно, что хоть пытается сам, а не сидит на всём готовеньком.
PS: ничего личного. Это так, информация для глубокого размышления.
Offline
#9 12.06.07 14:05
Re: Помогите с лабой по рекурсии.(1 курс) - СРОЧНО
antonoff написал(а):
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
//--------------------
int ct[][2]={{2,3},{4,5},{1,2},{6,2},{4,3},{3,1},{5,6},{-1,-1}}; // исходный набор
// костей домино
int mk[80]; // метка
//--------------------
int domino (int hf) // hf - половина кости домино
{
int i;
for (i=0; ct[i][0]!=-1; i++) // пока есть невыставленные
if (mk[i]==0) break;
if (ct[i][0]==-1) return 1;
for (i=0; ct[i][0]!=-1; i++)
{
if (mk[i]==1) continue; // если выставленная, то продолжаем
if (hf != ct[i][0] && hf != ct[i][1]) continue; // ищем подходящую кость
mk[i]=1; // !!! нашли !!!
int num=0; // индекс в паре
if (hf==ct[i][0]) num=1;
if (domino(ct[i][num])) // рекурсивный вызов
{
cout <<ct[i][num]<<":"<<ct[i][!num]<<" ";
return 1;
}
mk[i]=0;
}
return 0;
}
//----------------------
void main ()
{
int k,l;
cout <<"----Recursia-----\n\n";
cout <<"Before - ";
for (l=0;ct[l][0]!=-1;l++)
{
printf ("%d:",ct [l][0] );
printf ("%d ",ct[l][1] );
}
printf ("%c\n");
cout <<" After - ";
for (k=0; k!=9 && !domino (k); k++);
getch ();
}
ыыы, знакомый код)) помню, я его сдавал на своём 1курсе (щас 4 заканчиваю), и то он уже не первой свежести был =)
Offline

