Что вы подразумеваете под "каждая точка может достигать раньше другой"?
Мне кажется, вам нужен поиск BF. Используйте очередь FIFO следующим образом:
Пусть p1 и p2 будут позициями двух точек.
пусть f будет первым элементом в очереди, а l последним. Первоначально f = 0, l = 1. Пусть Q - очередь.
Q[f] = p1
Q[l] = p2
while ( f <= l )
{
poz = Q[f];
++f;
for each neighbour poz' of poz
if poz' hasn't been marked yet
{
mark poz'
add poz' to Q: Q[++l] = poz
}
}
Q должно быть размером вашей сетки (строки х столбцы). Вы можете использовать две матрицы: одну с позициями p1, которую можно достичь, а другую с позициями p2, или вы можете использовать одну матрицу и пометить, что квадраты p1 достигаются положительными числами, а квадраты p2 достигаются отрицательными числами. Если вам интересно, где они встречаются, вам просто нужно проверить, собираетесь ли вы пометить положительное значение из отрицательного значения (отрицательное и положительное) или наоборот. Это будет в основном делать ваше затопление по очереди: затопить один квадрат из p1, затем из p2, затем из p1, затем из p2 и так далее.