Input: Topology of energy harvesting WSN G (V , E ); the amount of energy SE(s i , l t ) for sensor node s i ∈ S in l t monitoring cycle, , ; the number of target nodes, m. Output: The set of active sensors in each monitoring cycle MZ(l t ), , ; and monitoring frequency FM(z i ) (1) Calculate link weights (Sr, z i ) and (s i , s j ) according to equation (8 ). (2) Initialize Num_Feasible_path = 0, FM(z i ) = 0, MZ(l t ) = Φ . (3) Build directed graph G d (V ′, E ′) by implementing node decomposition for G (V , E ). For each link (s i , s j ), node s i is replaced by and , and node s j is replaced by and . Establish the new connection relationship and increase the direct links, which include ( , ), ( , ), ( , ), ( , ), ( , ), ( , ), ( , ), and ( , ). Set the link weight: ( , ) = ( , ) = SE(s i , l t ); ( , ) = ( , ) = SE(s j , l t ); ( , ) = ( , ) = 0, ( , ) = ( , ) = min(SE(s i , l t ), SE(s j , l t )). (4) Repeat (5) Select virtual source node Sr and set Num_Feasible_path = 0; (6) For (Num_Feasible_path < m )(7) Find a feasible path (P ) between virtual source node Sr and sink node R in G d (V ′, E ′) (8) If (P == NULL), then (9) Goto exit (10) Else (11) For each link(p i , p j ) ∈ P in G d (V ′, E ′) (12) If link(p i , p j ) ∈ P and p i ∈ {z i } and p j ∈ { , } (13) SE(p j , l t ) = SE(p j , l t ) − (EZi (p j ) + EF(p j )) (14) (p i , p j ) = (p i , p j ) − EZi (p j ) (15) (p j , p i ) = (p j , p i ) + EZi (p j ) (16) Elseif link(p i , p j ) ∈ P and p i ∈ { , }and p j ∈ { , } (17) SE(p j , l t ) = SE(p j , l t ) − (ERi (p j ) + EF(p j )) (18) (p i , p j ) = (p i , p j ) − (ERi (p j ) + EF(p j )) (19) (p j , p i ) = (p j , p i ) + (ERi (p j ) + EF(p j )) (20) Elseif link(p i , p j ) ∈ P and p i ∈ Sr and p j ∈ {z j } (21) E (p j , l t ) = SE(p j , l t ) − (EZi (p j )) (22) (p i , p j ) = (p i , p j ) − EZi (p j ) (23) (p j , p i ) = (p j , p i ) + EZi (p j ) (24) End if (25) End for (26) End if (27) Num_Feasible_path = Num_Feasible_path + 1 (28) For each target node z i and z i ∈ P (29) FM(z i ) = FM(z i ) + 1 (30) End for (31) MZ(l t ) = MZ(l t ) ∪ P (32) End for (33) Resetting the link weight, if each link(q i , q j ) ∈ G d (V ′, E ′) If (q i ∈ Sr and q j ∈ {z j }) or (q i ∈ {z i }and p j ∈ { , }) (q i , q j ) = EZj (s i ) Else (q i , q j ) = min{SE(q i , l t ), SE(q j , l t )} End if (34) Until Num_Feasible_path < m