Find all reachable nodes in a graph You are given a directed graph in an adjacency dictionary format. This can be whatever format is most natural for your language. For instance, in python, this would be a dictionary with  keys of nodes and values which are lists of nodes which that node has an edge to. For instance:

G={1: [2, 3], 2: [3], 3: [1], 4:[2]}


Be reasonable. A dictionary of frozen sets is not allowed, even if it makes your code shorter. A list of lists is fine, if your language doesn't have dictionaries.

Your task is to implement a function that takes a directed graph and a starting node, and outputs all nodes reachable from the starting node. The output format is also flexible. A return value from a function is fine, so is print, etc.

Test case:

G={1: [2, 3], 2: [3], 3: [1], 4:[2]}
s=1

R(G,s)
{1,2,3}


Fewest characters wins. I will clarify if needed.
Mathematica 63 40 37
My earlier submission was incorrect. I had misinterpreted what ConnectedComponents returns.  The present approach relies on Belisarius' suggestion to useVertexOutComponent. 3 additional chars saved by alephalpha.
The following generates an 11 by 11 adjacency matrix of 0's and 1's, where 1 indicates that the vertex with the row number is connected directly to the vertex corresponding to column number of the cell. (SeedRandom ensures that your matrix a will match mine.)
SeedRandom[21]
a = Array[RandomChoice[{0.9, 0.1} -&gt; {0, 1}] &amp;, {11, 11}];


Example
(37 chars)
 AdjacencyGraph@a~VertexOutComponent~4


{4, 1, 7, 8, 9, 3}


Verifying
The directed graph displays how to reach vertices {1, 7, 8, 9, 3} from vertex 4.
AdjacencyGraph[a, ImagePadding -&gt; 30, VertexLabels -&gt; &quot;Name&quot;]