Cómo codificar la matriz de adyacencia

Cómo codificar la matriz de adyacencia

¿Sabes cómo codificar esto en látex? ingrese la descripción de la imagen aquí

Respuesta1

con nicematrixes super facil

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\[
\mathbf{A}_H = 
\begin{bNiceMatrix}[first-row,first-col]
    & v_6 & v_3 & v_4 & v_5 & v_1 & v_2 \\
v_6 & 0   & 1   & 0   & 1   & 0   & 0   \\
v_3 & 1   & 0   & 1   & 0   & 0   & 1   \\
v_4 & 0   & 1   & 0   & 1   & 0   & 0   \\
v_5 & 1   & 0   & 1   & 0   & 1   & 0   \\
v_1 & 0   & 0   & 0   & 1   & 0   & 1   \\
v_2 & 0   & 1   & 0   & 0   & 1   & 0   \\
\end{bNiceMatrix}
\]

\end{document}

Respuesta2

Éste es un problema interesante. Aquí defino una estructura de datos para gráficos, que permite imprimir la matriz de adyacencia, pero podemos imaginar otros usos.

La idea es almacenar los índices de los vértices en una secuencia y la lista de aristas en otra secuencia.

La lista de vértices se asigna (dos veces) para comprobar si un borde determinado está en la lista de bordes; en este caso 1se agrega al cuerpo de la matriz, en caso contrario 0.

El uso nicematrixpermite rellenar también la fila y columna exteriores.

\documentclass{article}
\usepackage{nicematrix}

\ExplSyntaxOn

\NewDocumentCommand{\definegraph}{mmm}
 {% #1 = graph name, #2 = vertex list, #3 = edge list
  \ryl_graph_define:nnn { #1 } { #2 } { #3 }
 }

\NewDocumentCommand{\adjacencymatrix}{m}
 {% #1 = graph name
  \ryl_graph_adjacency:n { #1 }
 }

\cs_new_protected:Nn \ryl_graph_define:nnn
 {
  \seq_clear_new:c { l__graph_vertex_#1_seq }
  \seq_set_from_clist:cn { l__graph_vertex_#1_seq } { #2 }
  \seq_clear_new:c { l__graph_edge_#1_seq }
  \seq_set_from_clist:cn { l__graph_edge_#1_seq } { #3 }
 }

\tl_new:N \l__ryl_graph_adjacency_tl

\cs_new_protected:Nn \ryl_graph_adjacency:n
 {
  \tl_clear:N \l__ryl_graph_adjacency_tl
  \seq_map_inline:cn { l__graph_vertex_#1_seq }
   {
    \tl_put_right:Nn \l__ryl_graph_adjacency_tl { & v\sb{##1} }
   }
  \tl_put_right:Nn \l__ryl_graph_adjacency_tl { \\ }
  \seq_map_inline:cn { l__graph_vertex_#1_seq }
   {
    \tl_put_right:Nn \l__ryl_graph_adjacency_tl { v\sb{##1} }
    \seq_map_inline:cn { l__graph_vertex_#1_seq }
     {
      \seq_if_in:cnTF { l__graph_edge_#1_seq } { ##1-####1 }
       {% the edge is in
        \tl_put_right:Nn \l__ryl_graph_adjacency_tl { & 1 }
       }
       {
        \seq_if_in:cnTF { l__graph_edge_#1_seq } { ####1-##1 }
         {% the edge is in
          \tl_put_right:Nn \l__ryl_graph_adjacency_tl { & 1 }
         }
         {
          \tl_put_right:Nn \l__ryl_graph_adjacency_tl { & 0 }
         }
       }
     }
    \tl_put_right:Nn \l__ryl_graph_adjacency_tl { \\ }
   }
  \begin{bNiceMatrix}[first-row,first-col]
  \tl_use:N \l__ryl_graph_adjacency_tl
  \end{bNiceMatrix}
 }

\ExplSyntaxOff

\definegraph{A}{1,2,3}{1-2,1-3,2-3}
\definegraph{B}{6,3,4,5,1,2}{6-3,6-5,3-6,3-4,3-2,4-3,4-5,5-1,1-2}

\begin{document}


\[
\adjacencymatrix{A}
\]

\[
\mathbf{A}_{H}=\adjacencymatrix{B}
\]

\end{document}

En el segundo ejemplo, puede ver que enumerar bordes duplicados es irrelevante.

ingrese la descripción de la imagen aquí

información relacionada