Hallo zusammen,
ich habe einen DFS code geschrieben, bekomme aber immer die Fehlermeldung ArrayIndexOutOfBound...
Das sieht total durcheinander aus, wäre aber echt cool wenn einer mir mal helfen würde, muss das bis morgen haben...leider
Der Graph ist übrigens in Form eines "Fliegennetzes" sage ich mal
ich habe einen DFS code geschrieben, bekomme aber immer die Fehlermeldung ArrayIndexOutOfBound...
Das sieht total durcheinander aus, wäre aber echt cool wenn einer mir mal helfen würde, muss das bis morgen haben...leider
Der Graph ist übrigens in Form eines "Fliegennetzes" sage ich mal
Code:
public class Adjazenzmatrix {
int knotenzahl = 0;
int [][] kante; // in dieser 2-dim. Reihung ("Adjazenzmatrix") wird der Graph..
// .. bzw. werden seine Kanten gespeichert
public void setzeKnotenzahl (int knZahl)
{
int zähler = 0;
knotenzahl = knZahl;
System.out.println(knotenzahl);
kante = new int [knotenzahl][knotenzahl];
for (int i=0; i < knotenzahl; i++) // Initialisieren: alle Kanten-
{
for (int j=0; j < knotenzahl; j++)
{
setzeKante(i,j,1);
}
}
}
void Ausgabe()
{
for (int i=0; i < knotenzahl; i++)
{
for (int j=0; j < knotenzahl; j++)
{
System.out.print(kante[i][j]+ "(i,j)"+i + j+" ");
}
System.out.println();
}
}
public int holeKnotenzahl ()
{
return (knotenzahl);
}
public void setzeKante (int von, int bis, int kosten)
{
kante [von][bis] = kosten;
kante [bis][von] = kosten;
}
public double holeKantenKosten (int von, int bis)
{
return (kante [von][bis]);
}
}
Code:
public class DSF extends Adjazenzmatrix{
boolean [] besucht; // für Tiefensuche: merkt sich, welche Knoten schon besucht wurden
public String tiefensuche_rek (int start, int ziel)
{
int knZahl = holeKnotenzahl();
System.out.println("tttttttttttt"+knZahl);
besucht = new boolean[knZahl]; // erzeugt besucht (global definiert für rekSuche)
for (int i=0; i<knZahl; i++) // setzt für alle Knoten besucht auf false, weil..
{
besucht[i] = false; // .. die Suche ja noch nicht los gegangen ist
}
String meldung = rekSuche (start, ziel, 0, ""); // Hier startet die (rekursive) Suche ..
if (meldung.equals("")) // .. und gibt den Weg (oder bei Misserfolg nichts) zurück
{
meldung = "Kein Weg von "+start+" nach "+ziel+" gefunden!";
}
return ("Tiefensuche: "+meldung+"\n");
}
private String rekSuche (int knoten, int ziel, double kosten, String weg)
{
besucht [knoten] = true; // Jeder Knoten, der von der Suche betreten wird,
// wird als besucht markiert
if (knoten == ziel) // Ziel erreicht?
{
weg = "Weg gefunden (Gesamt="+kosten+"): "+ziel;
}
else // Ziel noch nicht erreicht? Dann zu einem unbesuchten Nachbarn
{ // ..gehen und von dort den Weg zum Ziel suchen:
for (int nachbar = 0; nachbar < knotenzahl && !weg.startsWith("Weg gefunden"); nachbar++)
{ // Fürs Backtracking nach und nach alle Nachbarn prüfen!
if ((!besucht[nachbar]) && (holeKantenKosten (knoten, nachbar) < Double.POSITIVE_INFINITY))
{
weg = rekSuche (nachbar, ziel, kosten+holeKantenKosten(knoten,nachbar), weg);
}
}
if (weg.startsWith("Weg gefunden"))
{
weg = weg+"<-"+knoten; // Bei Rekursions-Rückweg nach Erfolg: Knoten zur
} // Wegbeschreibung dazu. Sackgassen werden nicht notiert!
}
return (weg);
}
}
Code:
public class Main {
public static void main(String args[])
{
int n =0;
Adjazenzmatrix neu = new Adjazenzmatrix();
/*
* Von/Nach 0 1 2 3 4 5 6 7 8 9
* ------------------------------------------------
* -> 0
* -> 1
* -> 2
* -> 3
* -> 4
* -> 5
* -> 6
* -> 7
* -> 8
* -> 9
neu.setzeKnotenzahl(10);
neu.Ausgabe();
System.out.println("hhhhhhhhh"+neu.knotenzahl);
System.out.println("kostentest1:"+neu.holeKantenKosten(0,5));
System.out.println("kostentest2:"+neu.holeKantenKosten(2,3));
System.out.println("kostentest3:"+neu.holeKantenKosten(3,5));
System.out.println("kostentest4:"+neu.holeKantenKosten(0,5));
System.out.println("kosten:"+neu.holeKantenKosten(0,1));
System.out.println("kosten:"+neu.holeKantenKosten(1,2));
System.out.println("kosten:"+neu.holeKantenKosten(2,3));
System.out.println("kosten:"+neu.holeKantenKosten(3,4));
System.out.println("kosten:"+neu.holeKantenKosten(4,5));
System.out.println("kosten:"+neu.holeKantenKosten(5,6));
System.out.println("kosten:"+neu.holeKantenKosten(3,7));
System.out.println("kosten:"+neu.holeKantenKosten(7,8));
System.out.println("kosten:"+neu.holeKantenKosten(8,9));
System.out.println("kosten:"+neu.holeKantenKosten(9,2));
DSF test = new DSF();
System.out.println("test 1"+neu.holeKnotenzahl());
test.tiefensuche_rek(8,9);
}
}
public class Main {
public static void main(String args[])
{
int n =0;
Adjazenzmatrix neu = new Adjazenzmatrix();
/*
* Von/Nach 0 1 2 3 4 5 6 7 8 9
* ------------------------------------------------
* -> 0
* -> 1
* -> 2
* -> 3
* -> 4
* -> 5
* -> 6
* -> 7
* -> 8
* -> 9
*/
/*while(i<10)
{
while(j<10)
{
neu.setzeKante(i, j,1);
}
j++;
}
i++;
*/
neu.setzeKnotenzahl(10);
neu.Ausgabe();
/*
while(m<90)
{
while(i<m)
{
neu.setzeKante(i,i+1,1);
System.out.println("wert von i "+i);
i++;
}
m = m+1;
}
while(m<=90){
System.out.println("wert von m2 "+m);
while(i<9+m)
{
System.out.println("wert von i1 "+i);
neu.setzeKante(i,i+1,1);
System.out.println("wert von i2 "+i);
++i;
}
System.out.println("wert von m "+m);
m=m+10;
}
*/
/*
while(m<9)
{
for(n=0;n<9;n++)
{ i++;
neu.setzeKante(i,i+1,1);
System.out.println("wert von i "+i);
}
m++;
i=i+10;
}
*/
/*
for(int p =0 ;p<9;p++)
{
neu.setzeKante(p, p+1,1);
}
for(int l =0 ;l<9;l++)
{
neu.setzeKante(l, l+1,1);
}
System.out.println("hhhhhhhhh"+neu.knotenzahl);
System.out.println("kostentest1:"+neu.holeKantenKosten(0,5));
System.out.println("kostentest2:"+neu.holeKantenKosten(2,3));
System.out.println("kostentest3:"+neu.holeKantenKosten(3,5));
System.out.println("kostentest4:"+neu.holeKantenKosten(0,5));
*/
/*
neu.setzeKante(1,2,1);
neu.setzeKante(2,3,1);
neu.setzeKante(3,4,1);
neu.setzeKante(4,5,1);
neu.setzeKante(5,6,1);
neu.setzeKante(6,7,1);
neu.setzeKante(7,8,1);
neu.setzeKante(8,9,1);
neu.setzeKante(10,11,1);
neu.setzeKante(11,12,1);
neu.setzeKante(12,13,1);
neu.setzeKante(13,14,1);
neu.setzeKante(14,15,1);
neu.setzeKante(15,16,1);
neu.setzeKante(16,17,1);
neu.setzeKante(17,18,1);
neu.setzeKante(18,19,1);
o---o---o---o---o---o---o---o---o---o
| | | | | | | | | |
| | | | | | | | | |
o---o---o---o---o---o---o---o---o---o
| |
| |
| |
o o
| |
| |
o o
| |
| USW |
o o
| |
| |
o o
| |
| |
o o
| |
| |
o---o---o---o---o---o---o---o---o---o
*/
System.out.println("kosten:"+neu.holeKantenKosten(0,1));
System.out.println("kosten:"+neu.holeKantenKosten(1,2));
System.out.println("kosten:"+neu.holeKantenKosten(2,3));
System.out.println("kosten:"+neu.holeKantenKosten(3,4));
System.out.println("kosten:"+neu.holeKantenKosten(4,5));
System.out.println("kosten:"+neu.holeKantenKosten(5,6));
System.out.println("kosten:"+neu.holeKantenKosten(3,7));
System.out.println("kosten:"+neu.holeKantenKosten(7,8));
System.out.println("kosten:"+neu.holeKantenKosten(8,9));
System.out.println("kosten:"+neu.holeKantenKosten(9,2));
DSF test = new DSF();
System.out.println("jjjjjjjjjjjj"+neu.holeKnotenzahl());
test.tiefensuche_rek(8,9);
}
}