ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
278
278
EMPFEHLEN
-
Hey Leute
Mein erstes eigen Projekt in Java. Nun komm ich nicht weiter. 8Damen Problem:Setzte auf einem Schachbrett 8x8 - 8 Damen die sich nicht stören können (waagrecht / senkrecht / diagonal)
Nun schaff ich die Diagonale nicht.
Hab zahlreiche Lösungen gefunden im Netzt jedoch will ich diese auf meinen Code anpassen, schaffs aber nicht. Kann mir wer ein bischen helfen? Bitte an meinem Code, tipps geben oder so was damit ich das hinkriege und verstehe.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
import java.awt.Color; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class Board extends JFrame { JPanel panel = null; boolean sw = false; int x = 50; int y = 0; int queens = 8; boolean[][] felder = new boolean[8][8]; public Board() { setTitle("Queen"); setSize(500, 500); setLayout(null); for (int row = 0; row < 8; row++) { for (int column = 0; column < 8; column++) { felder[column][row] = validColumn(column, row) && validRow(column, row) && validDiag(column, row); } } for (int row = 0; row < 8; row++) { for (int column = 0; column < 8; column++) { panel = new JPanel(); sw = !sw; panel.setBackground(sw ? Color.WHITE : Color.BLACK); panel.setSize(50, 50); panel.setLocation(x, y); if (felder[column][row]) { drawQueen(column, row); } add(panel); y = y + 50; } sw = !sw; x = x + 50; y = 0; queens++; } this.setVisible(true); } public void drawQueen(int column, int row) { Queen queen = new Queen(new ImageIcon("queen.png").getImage(), row, column); panel.add(queen); } public boolean validColumn(int column, int row) { for (int queens = 0; queens < 8; queens++) { if (felder[queens][row]) { return false; } } return true; } public boolean validRow(int column, int row) { for (int queens = 0; queens < 8; queens++) { if (felder[column][queens]) { return false; } } return true; } public boolean validDiag(int column, int row) { for (int queens = 0; queens < 8; queens++) { if (row == column) { System.out.println("Row: " + row + "Column: " + column + "Queens: " + queens); return false; } } return true; } public static void main(String[] args) { new Board(); } }
Dankebe real
don't deal
-
Ich mag mich ja täuschen, aber so aufn ersten Blick sieht mir dein Ansatz (einfach linear über das Feld iterieren und zu checken) zu trivial aus. Keine Rekursion, kein Backtracking?
Diese Lösung in Python sieht durchaus portierbar aus
Geändert von matdacat (11.02.09 um 16:45 Uhr)
-
11.02.09 17:37 #3
Jo, das ist zu trivial.
Test mal folgende Implementierung von validDiag mit deinem Code
Ist nicht highsophisticated, man sieht aber das Problem. Nach 5 Damen ist Schluss.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
public boolean validDiag(int c, int r) { boolean result = true; int i=0; while(c + i < queens && r + i < queens){ if(felder[c+i][r+i]){ result = false; } i++; } i=0; while(c + i < queens && r - i >= 0){ if(felder[c+i][r-i]){ result = false; } i++; } i=0; while(c - i >= 0 && r - i >= 0){ if(felder[c-i][r-i]){ result = false; } i++; } i=0; while(c - i >= 0 && r + i < queens){ if(felder[c-i][r+i]){ result = false; } i++; } System.out.println("Diacheck: " + c + ":" + r + " result:" + result); return result; }
http://www.tutorials.de/forum/attach...1&d=1234370197Denken gefärdet die Gewohnheit
-
Hab den Ansatz verstanden. Danke für die Hilfe, werde mich nochmal dahinter machen.
Grussbe real
don't deal
Ähnliche Themen
-
[IE7 Problem] Problem mit ul/li Höhen im IE7 bei Verwendung eines vertikalen Menüs
Von josDesign im Forum CSSAntworten: 0Letzter Beitrag: 11.01.11, 21:40 -
Problem: Flash MX (7.1) exportiert meine Fla nicht mehr - dringendes Problem
Von Lukasz im Forum Flash PlattformAntworten: 4Letzter Beitrag: 22.03.06, 20:50 -
Problem mit hover- background ändern & Problem bei Reload
Von ollioollio im Forum CSSAntworten: 0Letzter Beitrag: 06.10.04, 14:03 -
PROBLEM! Pinnacle 2 GB Begrenzung Windows 2000 DC 50 PROBLEM!
Von hennym im Forum Videoschnitt, Videotechnik & -produktionAntworten: 6Letzter Beitrag: 17.09.03, 22:09 -
Problem mit PopUp (Ja ich weiss Suche benutzten, hab ein ganz anderes Problem)
Von killkrog im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 13.06.02, 12:29





Zitieren
Login





