Количество уникальных элементов m, которые необходимо представить в симметричной матрице n n:
С основной диагональю
m = (n*(n + 1))/2
Без диагонали (для симметричной матрицы, как описывает ОП, необходима главная диагональ, но только для хорошей меры ...)
m = (n*(n - 1))/2
.
Не делится на 2, пока не будет важна последняя операция, если используется целочисленная арифметика с усечением.
Вам также необходимо выполнить некоторую арифметику, чтобы найти индекс i в выделенной памяти, соответствующей строке x и столбцу y в диагональной матрице.
Индекс в выделенной памяти i строки x и столбца y в верхней диагональной матрице:
с диагональю
i = (y*(2*n - y + 1))/2 + (x - y - 1)
без диагонали
i = (y*(2*n - y - 1))/2 + (x - y -1)
Для нижней диагональной матрицы переверните x и y в уравнениях. Для симметричной матрицы просто выберите либо x> = y, либо y> = x, и функции-члены будут переворачиваться по мере необходимости.