Ваш вопрос немного неясен, но на графике вам нужна функция, которая описывает отображение этого пути, например f (1,2) = 8.
i + j дает индекс диагонали, назовите его d. В диагонали над ней имеется (d + 1) d / 2 элементов. Если d четное, мы считаем вверх и вправо, если это нечетное, мы считаем вниз и влево, поэтому число элементов, которые мы посчитали по диагонали, равно j + 1 или i + 1 соответственно: 1003 *
unsigned int f(unsigned int i, unsigned int j)
{
unsigned int d = i+j;
unsigned int k = (d+1)*d/2 + (d%2 ? i : j) + 1;
return(k);
}
EDIT:
Я чувствую себя дураком. Функция выше работает для d <= N, но не для d> N (нижняя правая половина матрицы).
Перво-наперво. По какой-то причине я начал индекс с 1 вместо 0, так что f (0,0) = 1, что на самом деле не соответствует. Так что, если вы не возражаете, я уберу это +1
, так что f(0,0)=0
. Теперь разберись с нижней правой половиной
unsigned int f(unsigned int i, unsigned int j, unsigned int N)
{
unsigned int d = i+j;
if(d>=N)
return(N*N - f(N-1-i, N-1-j, N) - 1);
unsigned int k = (d+1)*d/2 + (d%2 ? i : j);
return(k);
}