IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> задача про домино, поиск наибольшей замыкающейся последовательности
Zenon
сообщение 8.10.2006 8:31
Сообщение #1


Гость






Здравствуйте.
Поставили перед нами такую задачe. Дано n кубиков домино, как известно они имеют номера с двух сторон, но в задаче сказано, что для данного случая они не ограничены цифрой 6, т.е. значения с обеих сторон могут быть боле 6, например 16 и 12 и т.п. (какие - то разумные пределы конечно есть, но просто больше чем в настоящих, т.е. чем 6). Задние состоит в том, чтобы найти самую длинную замкнутую цепочку.... Если честно теряюсь в догадках и по вопросу алгоритма и по вопросу реализации....
Надеюсь на Вашу помощь.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 8.10.2006 13:50
Сообщение #2


Гость






Что-то в этом духе:
#include <stdio.h>
#include <mem.h>

enum bool {
false = 0, true = 1
};

const int max = 28;
const int max_num = 20;

bool yes = false;
bool m[max_num + 1][max_num + 1] = {false};

int n;
int cep[2 * max + 1] = {0};
int best[2 * max + 1];
int p, maxlen;
// cep,best :array [1..max*2] of byte;
// p,maxlen :integer;

int read_data() {
int i, a, b;
FILE *f;

if((f = fopen("DM.TXT", "rt")) == NULL) {
fprintf(stderr, "Cannot open input file.\n");
return 1;
}

// fillchar(cep,sizeof(cep),0);
// fillchar(m,sizeof(m),false);
p = 1; maxlen = 0;
fscanf(f, "%d", &n); // readln(n);
for(i = 1; i <= n; ++i) {
fscanf(f, "%d %d", &a, &b); // readln(a,b);
m[a][b] = m[b][a] = true;
}
fclose(f); // close(input);
return 0;
}

void write_results() {

int i;
printf("%d\n", maxlen / 2);
if(maxlen > 1) {
i = 1;
while(i < maxlen - 1) {
printf(" <%d %d> :", best[i], best[i+1]);
i += 2;
}
printf(" <%d %d>", best[maxlen - 1], best[maxlen]);
}
printf("\n");
}

void s_cep() {

if(p - 1 > maxlen) {
memmove(&best[0], &cep[0], (p - 1)*sizeof(int));
// move(cep,best,p-1);
maxlen = p - 1;
yes = (maxlen / 2 == n) ? true:false;
}
}

bool exist(int k) {
// var i : integer;
int i = 0;

while((i <= max_num) && (m[k][i] == false)) i += 1;
return (i <= max_num) ? true:false;
}

void make_cep(int f) {

int s;

if(yes == true) return;

if(m[f][f] == true) {
m[f][f] = false;
cep[p] = f; cep[p + 1] = f; p += 2;
if(exist(f) == true) make_cep(f); else s_cep();
p -= 2;
m[f][f] = true;
}
else
for(s = 0; s <= max_num; ++s)
if(m[f][s] == true) {
m[f][s] = m[s][f] = false;
cep[p] = f; cep[p + 1] = s; p += 2;
if(exist(s) == true) make_cep(s); else s_cep();
p -= 2;
m[f][s] = m[s][f] = true;
}
}

int main() {
int i;

read_data();
for(i = 0; i <= max_num; ++i) make_cep(i);
write_results();
return 0;
}

(тестовый пример проходит, погоняй еще, может я где-то ошибся при переносе на С...)
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Zenon   задача про домино   8.10.2006 8:31
Michael_Rybak   Для перебора может быть полезен критерий: в графе ...   8.10.2006 9:49
volvo   Ну, поскольку ты не написал, на каком языке тебе н...   8.10.2006 10:07
Гость   Извини не подскажешь решение этой задачи на Си, а ...   8.10.2006 11:26
Nucris   2volvo Понимаешь (ничего, что на ты?) дело в том, ...   8.10.2006 12:04
volvo   Что-то в этом духе: #include <stdio.h> #incl...   8.10.2006 13:50
Nucris   Огромнео спасибо, протестирую, но спасибо за это р...   8.10.2006 16:06
volvo   Ну, это во-первых, зависит от твоего компилятора. ...   8.10.2006 16:49
Nucris   понятно, да на будущее учту, что точность формулир...   8.10.2006 17:50
Michael_Rybak   Погугли "поиск максимального цикла" ил...   8.10.2006 23:46
Nucris   Понятно, но все равно тебе спасибо Очень прошу vo...   9.10.2006 12:49
Michael_Rybak   Ты может BuildLog запости, не у всех ведь есть VC.   9.10.2006 13:14
volvo   А где, собственно, ты увидел отклонения от чистого...   9.10.2006 13:21
Nucris   Запустил, а этот visual собака ругается и вот это ...   9.10.2006 14:35
Michael_Rybak   1>c:\documents and settings\vbproffi...   9.10.2006 15:39
volvo   Ребят, вам шашечки, или ехать? Первая программа ра...   9.10.2006 15:45
Michael_Rybak   Ура! Короче я вот спросил на форуме TopCoder...   10.10.2006 12:09
Nucris   Вышли пожалуйста на lit12@bk.ru   9.10.2006 15:48


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"