#include <iostream>
#include "matrix.h"
using namespace amv;
template<class type>
void magicSquare(matrix<type> &m, int initialValue=1)
{
if(m.rows() != m.columns() || !(m.rows()%2))
return;
int counter=0, items=m.rows()*m.columns(), i=0, j=m.columns()/2;
while(counter<items)
{
m[i][j]=initialValue;
++initialValue;
++counter;
if(!(counter%m.columns()))
{
++i;
if(i==m.rows())
i=0;
}
else
{
--i; ++j;
if(i<0)
i=m.rows()-1;
if(j==m.columns())
j=0;
}
}
}
void main()
{
std::cerr<<"El cuadrado mágico - Matriz en la que la suma de los elementos de cada fila y de cada columna dan el mismo resultado\n\n";
int n,v=1;
std::cerr<<"Teclea el número de filas (impar) de la matriz cuadrada: ";
std::cin>>n;
std::cerr<<"Teclea el valor inicial (entero positivo): ";
std::cin>>v;
matrix<int> m1(n,n);
magicSquare(m1,v);
std::cout<<m1;
}