int Dim = 1; // Dimension del problema (1,2,3)

int NNE = 2; // Numero de nodos por elemento 
	     // 1D (2), 2D Rectangulos (4), 2D Triangulos (3), 3D Ortoedros (8)
int NEN = 2; // Numero de elementos que comparten el nodo (Soporte del nodo)
             // 1D (2), 2D Rectangulos (4), 2D Trianguloss (6), 3D Ortiedros (8) 

int NT       // Nodos Totales
int ND       // Nodos Desconocidos



double Coord     [NT][Dim] // Cordenadas del problema
int    Elementos [NT][NNE] // Dado un nodo que elementos lo tienen (tiene -1 si no hay ese valor)
int    Nodos     [NT][NEN] // Dado un elemento que nodos tiene
int    TipoNodo  [NT]      // Tipo de nodo, Frontera (-1), Desconocido (>= 0)
int    Solución  [NT]      // Se llena con los valores de frontera y al finalizar el calculo con los resultados de x


double M[NNE][NNE] // Matriz de Carga
double F[NNE]      // Vector de Carga

double A[ND][ND]   // Matriz de trabajo
double x[ND]       // Vector solucion
double b[ND]       // Vector de trabajo

// Algoritmo para llenado de la Matriz A y Vector b, usando la Matriz M y Vector de Carga F
for (i = 0; i < NT; i++) { // Recorre sobre todos los nodos
   if (TipoNodo == -1) continue; // Descarta los nodos de frontera
   for (j = 0 ; j < NEN; j++) { // Recorre sobre el soporte (numero de elementos que comparten el nodo)
      for(k = 0; k < NNE; k++) { // Recorre sobre los nodos del elemento (Numero de nodos por elemento)
         nd = Nodos[Elementos[i][j]][k]; // Nodo sobre el elemento de soporte
	 if (TipoNodo[nd] == -1) continue; // Nodo es frontera se descarta
	 A[TipoNodo[i]][nd] += M[j][k];
	 b[TipoNodo[i]] += F[k];
      }
   }
}


// Llenada la matriz A y el vector b resolver el sistema lineal
Ax=b


// Pasar el valor de x a la Solucion 
for (i = 0; i < NT; i++) {
   if (TipoNodo[i] >= 0) Solucion[i] = x[TipoNodo[i]] 
}
 
 
// Visualizar ahora usando Coord y Solucion
for (i = 0; i < NT; i++) {
   for (j = 0 ; j < NEN; j++) visualiza (Coord[i][j])
   visualiza(Solucion[i]
}


Nota: Favor de checar para 1D, 2D y 3D