Вы можете использовать более компактную схему, чтобы проверить, что все числа 1 .. (n*n)
используются без дубликатов с использованием кода, такого как:
int counts[n * n]; // Can't use an initializer with a VLA
memset(counts, '\0', sizeof(counts));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (square[i][j] <= 0 || square[i][j] > n * n)
return FALSE;
counts[square[i][j] - 1]++; // Map 1..n*n to 0..n*n-1
// if (++counts[square[i][j] - 1] > 1)
// return FALSE;
}
}
for (int i = 0; i < n * n; i++)
{
if (counts[i] != 1)
return FALSE;
}
Поскольку существует n*n
элементов для проверки, этот код использует пространство и время, которые являются линейными по отношению к количеству элементов в магическом квадрате, который находится в пределах постоянного фактора оптимального.
Это, вероятно, прибывает из Ответа. Вызов перенаправления. Проверьте эту ссылку на объяснение:
http://dotnet.org.za/armand/archive/2004/11/16/7088.aspx
(В большинстве случаев, называя Ответ. Перенаправление (URL, ложь) решает проблему)
Наиболее распространенная причина ThreadAbortException звонит Ответ. Конец, Ответ. Перенаправление или Сервер. Передача . Microsoft опубликовала некоторые предложенные функции, которые должны использоваться в земельном участке тех функций.
Как другие сказали, происходит при вызове Ответа. Конец () (который происходит, когда Вы называете Ответ. Перенаправление без передающей лжи как второй параметр). Это работает, как разработано; обычно, если Вы называете Ответ. Перенаправление, Вы хотите, чтобы перенаправление сразу произошло. Посмотрите это для получения дополнительной информации: