Is it a chess cycle?
Wolfram Language, 259 bytes
o=DirectedEdges-&gt;True
i|-&gt;RelationGraph[(d=Abs[#1[[2]]-#2[[2]]];#1!=#2&amp;&amp;NoneTrue[i,RegionMember[Line[p={#1[[2]],#2[[2]]}]~RegionDifference~Point@p]@*Last]&amp;&amp;Switch[#1[[1]],r,Times@@d==0,b,Equal@@d,n,Sort@d=={1,2}])&amp;,i,o]~IsomorphicGraphQ~CycleGraph[Length@i,o]

Try it online!
(uses \[Function] rather than |-&gt;, as TIO doesn't have the most recent version of the language)
Defines a function that takes in a list of piece positions as input, each in the form {piece, {row, column}} where piece is one of r, b, or n.
Un-golfed explanation:
i|-&gt;
IsomorphicGraphQ[                (*check if the following graphs are equivalent*)
  CycleGraph[Length[i], DirectedEdges -&gt; True],
                                 (*cyclic graph with length of input*)
  RelationGraph[                 (*graph defined by a functional relation*)
    (d = Abs[#1[[2]] - #2[[2]]]; (*set `d` to absolute difference in coordinates*)
    #1 != #2 &amp;&amp;                  (*no pieces attack themselves*)
    NoneTrue[i,                  (*no other pieces are...*)
      RegionMember[RegionDifference[Line[p = {#1[[2]], #2[[2]]}], Point[p]]] @* Last
    ] &amp;&amp;                         (*between these two pieces*)
    Switch[First @ #1,           (*switch by attacking piece*)
      r, Times @@ d == 0,        (*rooks attack when one coordinate offset is zero*)
      b, Equal @@ d,             (*bishops attack when both offsets are equal*)
      n, Sort[d] == {1, 2}]      (*knights attack when one offset is 1 and the other is 2*)
    )&amp;, i, DirectedEdges-&gt;True], (*apply to list of pieces*)
]&amp;