Consider a list (coordpairs
) of coordinate pairs as
np = 4;
coordpairs = Cases[Subsets[Tuples[Range[np],{2}],{2}], {{a_, b_}, {c_, d_}} /;
Abs[c - a] < 2 && Abs[d - b] < 2];
and their corresponding connectivities (conn
) as
Edit 2: (corrected connectivity)
conn = {1., 1., 0., 1., 0., 1., 1., 1., 0., 1., 1., 0., 1., 0., 1., 0., 1.,
0., 1., 1., 0., 1., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
0., 0., 0., 0., 1., 1., 1., 1.};
1
indicates that there exists a path between the two points and 0
otherwise.
Now I wish to find all the paths (specifically, the coordinates of the points through the paths). For example, the first group will consist of the coordinates
{{1, 1}, {1, 2}, {2, 1}, {1, 3}, {2, 2}, {2, 3}, {1, 4}, {2, 4}, {3, 1}, {3, 2}, {3, 3}}
Second group:
{{3, 4}, {4, 4}, {4, 3}, {4, 2}, {4, 1}}
Edit 1 These two groups are visualized in the image below:
How can I do this?
Edit 3:(for higher np
values)
Both the answers work well for np = 4
. However, for np = 8
I have,
Length@coordpairs = 210;
conn = {0., 1., 1., 0., 0., 0., 0., 1., 0., 1., 1., 1., 0., 1., 1., 1., 0., 1., 1., 1., 1., 1., 0., 1., 1., 0., 0., 1., 1., 1., 1., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 0., 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1., 0., 1., 0., 1., 0., 1., 1., 1., 1., 0., 1., 1., 0., 0., 0., 1., 0., 1., 0., 1., 1., 1., 1., 1., 1., 1., 0., 1., 1., 0., 1., 0., 0., 1., 1., 0., 1., 1., 0., 1., 1., 0., 0., 0., 1., 0., 1., 0., 1., 1., 0., 1., 1., 1., 1., 0., 1., 1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 1., 1., 1., 0., 1., 1., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 0., 1., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 1., 1., 1., 1., 0., 1.};
Now
comps = ConnectedComponents[
UndirectedEdge @@@ Extract[coordpairs, Position[db, 1.]]];
gives me 4
connected components where
Length@comps[[1]] + Length@comps[[2]] + Length@comps[[3]] +
Length@comps[[4]]
results
62
while it should be 64
. The two missing coordinates are
{{1, 2}, {6, 3}}
where is it going wrong?
ConnectedComponents[UndirectedEdge @@@ Extract[coordpairs, Position[conn, 1.]]]
? $\endgroup$ConnectedComponents
. There are two vertices with no connections which are themselves additional components. See Szabolcs' answer where a graph object is passed such thatConnectedComponents
includes these. $\endgroup$