Софтуерно Инженерство
Loading...
+ Нов въпрос
zlobjul avatar zlobjul 4 Точки

JA2 Task 4 - The Matrix

Здравейте , направих The Matrix , но на 4 отговора ( 1 , 3, 4, 5 ) ми ги дава грешни . Какви ли комбинации не пробвах и при мен работи .

Вече не знам как да дебъгвам на сляпо и с какви комбинации да опитвам ( при матрица 20 на 20 и всевъзможни символи трябва да загубя месеци да изпробвам всичко възможно ) . Дайте няк'ви насоки как да разберем при какви случаи гърми , много ми е трудно да дебъгвам нещо, което не виждам ...

Благодаря ,

Поздрави

Любо

Тагове:
0
C++ Fundamentals
georgi.stef.georgiev avatar georgi.stef.georgiev 641 Точки
Best Answer

Здравей,

Доколкото виждам нулевите тестове не ти минават в Judge (отвори си детайли на решението и ще видиш - за тях можеш да сравняваш какво е изкарала твоята програма и какво се е очаквало - това са примерите от условието) - по конкретно твоята програма не изкарва изход, така че първият ти приоритет е да подкараш тях.

В тази точно ситуация, особено ако на теб ти работи за тези примери, значи най-вероятно имаш някъде излизане извън размерите на някой масив/вектор, или някаква друга форма на недефинирано поведение заради неправилна работа с памет. Не съм ти гледал кода в детайли, но обикновено това е ситуацията - огледай си внимателно индексите, особено след като е на нулевите тестове можеш спокойно да го пуснеш да ти печата всички индекси и размери и да видиш дали нещо някъде излиза.

Друго нещо - не гледах много внимателно, но не забелязах кодът ти да се справя добре със "завои" в матрицата - ти пускаш в четирите посоки запълване, но какво става ако има завой? Какво става ако има оградена област, която нямаш право да запълниш, защото ти е казано да запълваш отвън? Поддържаш ли ги тези случаи? Идеята на тази задача е да направите нещо подобно на Fill with Color (кофата) на Paint - виж той как работи и дали твоята програма се държи по същия начин (дали ще е матрица от пиксели или матрица от символи, логиката е една и съща). Може и правилните неща да правиш, нямам време да огледам в детайли, но помисли за споменатите неща.

Ето ти един пример - X-ът е  началото на маркирането, тук всички нули трябва да се попълнят, с изключение на тези, които са обградени изцяло от единици (струва ми се, че твоя код ще пропусне поне тези, които са между 1-ците и 2-ките):

0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 1 2 2 0 0 0 0 
0 0 0 1 0 1 0 2 0 0 0 0 
0 0 0 1 0 1 0 2 0 0 0 0 
0 0 0 1 0 1 0 2 0 0 0 0 
0 0 0 1 0 1 0 2 0 0 0 0 
0 0 0 1 1 1 0 2 0 0 0 0 
0 X 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 



Една подсказка за решението на тази задача - правилният подход се върти около това за всеки пиксел/символ, да огледаш съседните и да видиш кои имаш право да оцветиш. След това да повториш същото за всеки един от тях и т.н. - тоест ще ти трябва всеки път да добавяш нови съседи, които на следващата итерация оцветяваш и след това добавяш техните съседи и т.н. (внимавай да не добавяш съседи, през които вече си минал, иначе става безкрайно).

Помисли върху тези неща, които споменах и питай пак ако нещо не ти е ясно.

Поздрави,

Жоро

0