## 1. Notation and definitions

By *graph*, we mean an undirected graph without loops or multiple edges. If *G* is a graph, we denote the sets of vertices and edges of *G* by *V*(*G*) and *E*(*G*), respectively. An edge {*x*, *y*}∈*E*(*G*) with *x*, *y*∈*V*(*G*) will be simply denoted by *xy*. We refer to Diestel (2005) for basic notions such as adjacent vertices, paths, cycles or the neighbourhood of a vertex. Let us recall the distinction between a *subgraph* and an *induced subgraph*: a subgraph of *G* is a graph *H* with *V*(*H*)⊆*V*(*G*) and *E*(*H*)⊆*E*(*G*), whereas if *W*⊆*V*(*G*), the subgraph *induced by G on W* is the graph *G*[*W*] whose vertex set is *W*, and whose edges are all the edges *xy*∈*E*(*G*) with *x* and *y* in *W*.

From now on, we consider only connected graphs; for *v*∈*V* and *r*∈*N*, the *ball* of radius *r* centered at *v* is the set

where *d*(*v*, *w*) denotes the number of edges in any shortest path between *v* and *w*, i.e. the *length* of any shortest path between *v* and *w*. Whenever *d*(*v*, *w*)*r*, we say that *v* and *w r-cover* each other (or simply *cover* if there is no ambiguity). A vertex *c*∈*V*(*G*) is said to *r-separate* (or simply *separate*) vertices *x* and *y* if *c r*-covers one of them and does not *r*-cover the other.

In this paper, what we call a *code* is simply a set of vertices ��⊆*V*(*G*), and we refer to its elements as *codewords*. A code �� is said to be *r-covering* (or *r-distance-dominating*) if every vertex *v*∈*V*(*G*) is *r*-covered by at least one codeword *c*∈��. A code �� is said to be *r-separating* if for every pair of distinct vertices *x*≠*y* of *G*, there exists a codeword *c*∈�� that *r*-separates *x* and *y*.

An *r-identifying code* is a code, which is both *r*-covering and *r*-separating. Equivalently, ��⊆*V*(*G*) is an *r*-identifying code if all the sets

for *v*∈*V*(*G*) are non-empty and different.

More generally, if �� is a code and *A* is a subset of *V*(*G*), we denote by *I _{r}*

^{��}(

*A*) the set of codewords, which

*r*-cover at least one element of

*A*, i.e.

If *r* and *l* are positive integers, an (*r*, *l*)-*identifying code* is a code �� such that the sets *I _{r}*

^{��}(

*A*) for all

*A*⊆

*V*(

*G*) with are different. Note that, in this case, as , then for ; thus, an (

*r*, 1)-identifying code is simply an

*r*-identifying code.

We recall that the *degree* of a vertex *v*∈*V*(*G*) is the number *δ*(*v*) of vertices *w*∈*V*(*G*) such that *vw*∈*E*(*G*). The maximum degree of *G* is defined as

Finally, a graph is *planar* if it can be drawn in the plane in such a way that its edges do not cross. For precise definitions and additional background about graphs, we refer once again to Diestel (2005). The reader will also need basic knowledge in algorithmic complexity such as polynomial reduction and NP-completeness; for these notions, we refer to Garey and Johnson (1979).