# Poteze skakača/Java

## Izvorna koda

`import java.util.List;import java.util.Vector; public class Skakac {	int n; // velikost sahovnice	int[][] polje; // tabela polj na sahovnici	static final int PRAZNO = 0;	int k; // stevec potez		public Skakac(int n) {		this.n = n;		k = 0;		polje = new int[n][n];	}		// vrne true, ce je sahovnica polna	public boolean jePolna() { return k == n*n; }		// izpisi sahovnico	public void izpisi(){		for (int[] vrstica : polje){			for (int j : vrstica) {				System.out.print(j + "\t");							}			System.out.println();		}	}			// Poisce resitev glede na trenutno stanje, zacni v (x,y).	// Vrne true, ce je nasel resitev.	public boolean resi(int x, int y) {		narediPotezo(x,y);		if (jePolna()) {			return true;		}		else {			for (Koordinata p : moznePoteze(x,y)){				if (resi(p.x, p.y)) { return true; }			}			odstraniPotezo(x,y);			return false;		}	} 	// poteze, ki so mozne iz polja (x,y)	public List<Koordinata> moznePoteze(int x, int y) {		List<Koordinata> s = new Vector<Koordinata>();		final int[] dx = { 2,  1, -1, -2, -2, -1,  1,  2};		final int[] dy = { 1,  2,  2,  1, -1, -2, -2, -1};		for (int i = 0; i < dx.length; i++){			if (veljavnaPoteza(x+dx[i],y+dy[i])) { s.add(new Koordinata(x+dx[i],y+dy[i])); }		}		return s;	} 	private boolean veljavnaPoteza(int x, int y) {		return 0 <= x && x < n && 0 <= y && y < n && polje[x][y] == PRAZNO;	} 	public void odstraniPotezo(int x, int y) {		k--;		polje[x][y] = PRAZNO;	} 	public void narediPotezo(int x, int y) {		k++;		polje[x][y] = k;	}} `

`public class Koordinata {	public int x, y;		public Koordinata(int u, int v) { x = u; y = v; }		public String toString() {		return "(" + x + "," + y + ")";	}} `

## Primer uporabe

```> s = new Skakac(8);
> s.resi(0,0)
true
> s.izpisi()
1	60	39	34	31	18	9	64
38	35	32	61	10	63	30	17
59	2	37	40	33	28	19	8
36	49	42	27	62	11	16	29
43	58	3	50	41	24	7	20
48	51	46	55	26	21	12	15
57	44	53	4	23	14	25	6
52	47	56	45	54	5	22	13
```