A nice rahter-simple option would be Babai's Nearest Plane Algorithm. This is an **approximation** algorithm which outputs a vector of the lattice which is "close" the given target $w$. The accuracy of the approximation depends on the rank $n$ of the lattice. The good things are: the algorithm runs in polynomial-time and it is fairly easy to implement.

**Input:** Basis $B\in\mathbb{Z}^{m\times n}, w\in\mathbb{Z}^{m}$

**Output:** A vector $x\in \mathcal{L}(B)$ such that $\lVert x - w\rVert \leq 2^{\frac{n}{2}} \:\text{dist}(w,\mathcal{L}(B))$

- Run $\delta$-LLL on $B$ with $\delta=3/4$.
$b \leftarrow w$

**for** $j = n$ to $1$ **do**

$\qquad b=b-c_j b_j$ where $c_j = \lceil \langle b, \tilde{b}_j \rangle / \langle \tilde{b}_j, \tilde{b}_j \rangle\rfloor$

Output $x:=w-b$

Above, $\delta$-LLL denotes the Lenstra-Lenstra-Lovasz algorithm, used as a subroutine to obtain a $\delta$-LLL Reduced Basis $\lbrace b_1,\ldots,b_n \rbrace$ of your original basis $\lbrace v_j \rbrace$. The vectors $\lbrace \tilde{b}_j \rbrace$ are the Gram-Schmidt orthogonalization of the LLL basis.

It seems that this algorithm is normally the first to be taught in university courses. I read these algorithms and definitions in Oded Regev's course about Lattices in Computer Science.

For **exacts** algorithms, this short review might be helpful. Alternatively, this text is more technical but rather complete.