2015-04-07 3 views
2

Я работаю над своей домашней работой, и мне нужен алгоритм заполнения заливки в c, но рекурсия, структуры и любая библиотека (кроме stdio.h) не оговорены, мне разрешено использовать только итерацию. Я работал на нем в течение 3-х дней, но я не мог это сделать, мне нужна помощьАлгоритм наводнения с итерацией

oldTeam (глобальная переменная) является целевой цвет

newTeam (глобальная переменная.) Является замена цвета

х и у (как глобальный) являются строками и колонные от начальной точки наводнения заполнения

рХа и р являются переменными, чтобы хранить начальные координаты начальной точки

и функция hasNeighbor (х, у) является поиск, есть ли какие-либо цвето whic является целевым цветом:

int hasNeighbor(int x,int y) 
{ 
    if(table[x+1][y]==oldTeam || table[x+1][y+1]==oldTeam || table[x+1][y-1]==oldTeam || table[x][y+1]==oldTeam || table[x][y-1]==oldTeam || table[x-1][y]==oldTeam || table[x-1][y-1]==oldTeam || table[x-1][y+1]==oldTeam) 
     return 1; 
    else 
     return 0; 

    } 

Где ошибка в моем коде или алгоритме

(Прежде чем задать этот вопрос, я был поиск этой темы на этом сайте, и Google, но решения, которые я нашел содержат рекурсии, структуру или не разрешено библиотеку)

спасибо ..

+0

Вам следует избегать использования goto везде, где это возможно (что означает почти везде). – Eregrith

+0

@Eregrith да, я тоже знаю, что у меня нет опыта работы с goto, но это окончательная версия моего кода, и я пробовал миллион разных вещей, и я получил миллион неудач – mugetsu

+1

Все нормально, это случается со всеми. Не волнуйтесь, вы скоро это получите. В то же время, сохраняйте вредные привычки снаружи;) – Eregrith

ответ

0

сделать один проход по всем элементам в массиве. Определите, какие из них нужно изменить в соответствии со своими соседями и изменить их. Следите за тем, есть ли у вас какие-либо изменения, и если произошли какие-либо изменения, сделайте это снова.

bool anyChange; 
do { 
    anyChange = false; 
    ... change what needs changing 
} while (anyChange); 

Не особенно эффективен в исключительных случаях, но прост и работает.

+0

Я вижу, но когда одна ячейка менялась, ее соседи рассматривали соседа, как я могу их изменить – mugetsu

+0

, а также они дают мне матрицу 1000x1000, к сожалению :( – mugetsu

Смежные вопросы