Also versuche ich gerade ein Java-Programm zu machen, das durch ein Labyrinth eine einzige Lösung findet. Um dies zu tun Ich verwende ein Verfahren zu schaffen, die ein Labyrinth schafft, die eine einzigartige Lösung hat:Java - Erschaffe ein Labyrinth mit einer einzigartigen Lösung
private void Create (int x, int y, int val) {
int[] perm = randPerm(4);
m[x][y] ^= val;
for (int i=0; i<4; ++i) {
int p = perm[i];
if (m[x+DX[p]][y+DY[p]] == 15) {
m[x][y] ^= TWO[p];
Create(x+DX[p], y+DY[p], TWO[p^2]);
}
}
}
Also, bevor ich mache das Verfahren beginnen, das Labyrinth zu lösen Ich versuche, herauszufinden, wie das obige Verfahren immer erstellt ein Labyrinth mit einem eindeutigen Pfad (wie zum Beispiel p^2 verwendet wird). Wie funktioniert die obige Methode?
private int[][] m; // maze representation
private int rows; // number of rows in the maze
private int cols; // number of columns in the maze
private final static byte[] TWO = { 1, 2, 4, 8, 16};
private final static byte[] DX = { 0,+1, 0,-1};
private final static byte[] DY = {-1, 0,+1, 0};
private boolean done; // used in finding a single solution.
private long count; // used in finding the number of solutions.
private Random r; // for generating random integers.
public Maze (int nr, int nc, int seed) {
r = new Random(seed);
rows = nr; cols = nc;
m = new int[nr+2][nc+2];
for (int r=1; r<=nr; ++r)
for (int c=1; c<=nc; ++c)
m[r][c] = 15;
for (int r=0; r<nr+2; ++r)
m[r][0] = m[r][nc+1] = 16;
for (int c=0; c<nc+2; ++c)
m[0][c] = m[nr+1][c] = 16;
Create(nr/2+1, nc/2+1, 0);
}
private int[] randPerm(int n) {
int[] perm = new int[n];
for (int k=0; k<n; ++k) perm[k] = k;
for (int k=n; k>0; --k) {
int rand = r.nextInt(k);
int t = perm[rand]; perm[rand] = perm[k-1]; perm[k-1] = t;
}
return(perm);
}
Können Sie uns allen relevanten Code zeigen? Zum Beispiel sind die Variablen 'm' und' TWO' nicht in dem von Ihnen angegebenen Ausschnitt definiert. –
Ok Ich habe es aktualisiert, um mehr Methoden anzuzeigen. – Chase
Wir müssen wissen, was 'int [] perm = randPerm (4);' auch. Ich habe eine Vermutung gemacht, aber es wäre schön, das sicher zu wissen. – NAMS