Для цикла, проверка пар, которые были бы идентичны

0

Я использую цикл double для цикла, чтобы перебирать список объектов и проверять, что мой бот в позиции я столкнулся с ботом в позиции j. Я успешно проверяю для комбинаций ii, jj и что это не должно быть сделано, но я ищу, чтобы обращаться, когда i, j происходит, что j, я не происходит. Например, (1, 1) не должно происходить, и его проверяли, однако, (1,4), но когда он переполняется, я НЕ хочу (4,1) произойти.

Мысли:

Я думал, что временная ситуация сохраняется, когда это происходит, однако это бомбы, когда происходит несколько столкновений между несколькими ботами. Есть ли способ избежать этой проблемы? Мой вопрос заключается не в модульности, а в использовании двойного цикла.

   for(int i = 0; i < count; i++)
   {
      for(int j = 0; j < count; j++)
      {
         if(i != j)
         {
            if(vbot[i]->CollidedWith(vbot[j]))
            {

               vbot[i]->DoBattleWith(vbot[j]);
            }
         }
      }
   }
Теги:
for-loop
visual-c++

1 ответ

1
Лучший ответ

Просто измените внутренний цикл на

  for(int j = i + 1; j < count; j++)

и избавиться от утверждения if.

С этими изменениями код будет рассматривать только пары (i, j) такие, что i < j.

  • 0
    Я не думал таким образом. Спасибо. Это имеет большой смысл, если 3 сталкивается с 5, то, очевидно, 5 сталкивается с 3, и нет никакой причины когда-либо проверять (y, x) для каждого (x, y).
  • 0
    @WhyCry: рад возможности помочь. Это очень распространенная модель, которая проявляется постоянно, поэтому полезно знать об этом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню