2015-10-11 4 views
0

Предположим, вы делаете BFS/DFS на 2-й сетке. В этом случае вам нужно отметить ранее посещенные позиции. Вы можете использовать 2d массив логических. Но когда у вас будет много дел, вы должны их очистить много раз. Любая лучшая идея использования флага 2d?Использование 2d массива флагов эффективно

ответ

0

Самый эффективный способ, которым я нашел, - это взять 2d массив целых чисел. Сначала мы будем устанавливать все точки в 0. Тогда в каждом случае мы сделаем текущий посетитель [] [] равным номеру случая. Если номер дела равен текущему номеру, то он посещается. иначе он не будет посещен. Psudocode здесь:

int visited[max][max]//declare it as a global array so that it will initially 0 
int case=current case number//suppose 1. We will increase it in each test. 
check if visited[i][j]==case 
    YES: continue //this point is visited before 
    NO : visited[i][j]=case and do next steps here.//not visited. 

Я хотел бы, чтобы лучше видеть ideas.They поможет me.thanks.

+0

Этот подход ломается, когда вы повторяете достаточное количество раз, чтобы получить переполнение номера. –

+0

Заполнение линейной памяти - это быстрая операция, используйте memset после каждой операции, также вы можете использовать битовые поля для хранения данных в компактной форме для экономии памяти, если у вас много записей. –

+0

Не могу понять. Можете ли вы объяснить, когда он ломается? @Valeri Atamaniouk – madMDT

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