A method for selecting at least one relay in a communication network; said network comprises a plurality of nodes; each of said nodes comprises at least one processing unit; each pair of said nodes is characterized by a first connection number, wherein a connection number characterizes the quality of connection between a pair of nodes; each of said processing unit is programmed to execute said method; wherein said method comprising: a. setting at least one first node to be a relay; b. for one of said relays, selecting a second connection number for each pair of third (302a, 302b, 302c) and second (301a, 301b) nodes; each third node (302a, 302b, 302c) being connected to said relay via a second node (301a, 301b); said second connection number is associated with the corresponding first connection number of each pair of third (302a, 302b, 302c) and second (301a, 301b) nodes; c. associating each of said third nodes (302a, 302b, 302c) with a first score when connected to each of said second nodes (301a, 301b) respectively; said first score associated with the pair consisting of the first connection number characterizing said third node (302a, 302b, 302c) and said relay and of the second connection number characterizing said third node (302a, 302b, 302c) and said second node (301a, 301b) d. characterizing each of said second nodes (301a, 301b) with a second score; said second score being any combination of said first scores of said third nodes (302a, 302b, 302c); e. selecting at least one of said second nodes (301a, 301b) in accordance with said second score of said second nodes; f. repeating steps (b) to (e) for all relays in said network; g. setting at least one of said selected second nodes (301a, 301b) to be a relay in said network; h. updating said network with said selected relays; and i. if a stopping criterion is not satisfied, repeating steps (b) to (h) for all relays in said network; said stopping criterion is selected from a group comprising of (i) number of relays in said network is larger than M, where M is a predefined integer greater than 0; (ii) each of said nodes in said communication network is connected to at least one relay. a. setting at least one first node to be a relay; b. for one of said relays, selecting a second connection number for each pair of third (302a, 302b, 302c) and second (301a, 301b) nodes; each third node (302a, 302b, 302c) being connected to said relay via a second node (301a, 301b); said second connection number is associated with the corresponding first connection number of each pair of third (302a, 302b, 302c) and second (301a, 301b) nodes; c. associating each of said third nodes (302a, 302b, 302c) with a first score when connected to each of said second nodes (301a, 301b) respectively; said first score associated with the pair consisting of the first connection number characterizing said third node (302a, 302b, 302c) and said relay and of the second connection number characterizing said third node (302a, 302b, 302c) and said second node (301a, 301b) d. characterizing each of said second nodes (301a, 301b) with a second score; said second score being any combination of said first scores of said third nodes (302a, 302b, 302c); e. selecting at least one of said second nodes (301a, 301b) in accordance with said second score of said second nodes; f. repeating steps (b) to (e) for all relays in said network; g. setting at least one of said selected second nodes (301a, 301b) to be a relay in said network; h. updating said network with said selected relays; and i. if a stopping criterion is not satisfied, repeating steps (b) to (h) for all relays in said network; said stopping criterion is selected from a group comprising of (i) number of relays in said network is larger than M, where M is a predefined integer greater than 0; (ii) each of said nodes in said communication network is connected to at least one relay.