Mathematica, 180 bytes
(f=Flatten@#;p=Partition)[If[Tr[1^VertexComponent[r~Graph~Cases[##&@@p[#,2,1]&/@Join[g=p[r,5],g],{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b],#]]<3,f[[#]],"x"]&/@(r=Range@25),5]&
Explicación:
(f=Flatten@#;p=Partition)[
If[
Tr[1^VertexComponent[
r~Graph~Cases[
##&@@p[#,2,1]&/@Join[g=p[r,5],g],
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ":>a<->b
],
#
]]<3,
f[[#]],
"x"
]&/@(r=Range@25),
5
]&
Función pura que acepta una 5x5matriz. es el carácter de uso privado de 3 bytes que U+F3C7representa el operador de transposición postfix\[Transpose] .
(f=Flatten@#;p=Partition): Aplana la lista de entrada y la almacena f. Lo establece p = Partitiony lo devuelve.
g=p[r,5]: La matriz {{1,2,3,4,5}, ..., {21,22,23,24,25}}(esto se debe a que rse establece en Range@25).
Join[g=p[r,5],g]: la lista de filas y columnas de g.
p[#,2,1]&: Función pura que divide la lista #en sublistas de longitud 2con superposición 1; es decir, la lista de pares adyacentes en #.
##&@@p[#,2,1]&: Igual que el anterior, excepto que devuelve a Sequence.
##&@@p[#,2,1]&/@Join[g=p[r,5],g]: Asigna la función anterior de las filas y columnas de gpara obtener una lista de todas las entradas adyacentes en g. Mi instinto dice que hay una forma más corta de hacer esto.
r~Graph~Cases[...]: Gráfico cuyos vértices son los enteros 1, ..., 25y cuyos bordes son los bordes entre las entradas adyacentes en las gque tienen las mismas entradas correspondientes en la matriz de entrada (que no sea" " )
{a_,b_}/;(A=f[[a]])==f[[b]]&&A!=" ": Patrón que coincide de {a,b}tal manera f[[a]] == f[[b]](mismo valor en la matriz de entrada) y que no son iguales a " ". Establecer A = f[[a]]para guardar el 1byte.
...:>a<->b: Reemplace cada partido con un borde no dirigido de a a b.
VertexComponent: Devuelve el componente conectado del segundo argumento (un vértice) en el primer argumento (un gráfico).
Tr[1^VertexComponent[...]]: El tamaño del componente conectado. Guarda 1byte de Length@VertexComponent[...].
If[Tr[...]<3,f[[#]],"x"]&: Función pura que tiene una entrada #en g. Si el tamaño de su componente conectado es menor que 3, reemplácelo con la entrada correspondiente en la entrada. De lo contrario, reemplácelo con"x" .
(f=Flatten@#;p=Partition)[...,5]: Y finalmente, rediseñar el resultado para que sea una 5x5matriz.