Stümpt, der Algorithmus findet nur Dreiecke mit einer
waagerechten und einer senkrechten Kante. An die schräg
liegenden Dreiecke hatte ich nicht gedacht.
Nu, machen wir es so:
Wir interpretieren die Zeilen- und Spaltenpositionen in der
Matrix als kartesische Koordinaten.
Dann betrachten wir alle Tripel von Einsen in der Matrix. Ein
Tripel liege an den Positionen P, Q und R. Dann testen wir, ob
die Vektoren P->Q und P->R senkrecht aufeinander stehen
(Skalarprodukt). Wenn ja, haben wir ein rechtwinkliges Dreieck
mit rechtem Winkel bei P.
Die Schleifen so zu gestalten, dass keine Dreiecke doppelt
gezählt werden, bleibt dem interessierten Leser zur Übung
überlassen
.
Gruß, Ralf
ähm , ja, ich hab das jetzt mal nur schnell runtergelesen was du gechrieben hast, aber ich glaube ich hätte eine möglichkeit … ich könnte es in C/C++ schreiben (obwohl ich fast nichts kann, vom programmeiren her), nur hab ich keine lust, und keine zeit, aber ich könnte dir ja aufschreiben auf was du achten musst:
1.) von pos 1-1 bis pos x-x(also von links oben nach rechts unten in der matrix), nacheinander jede stelle überprüfen und wenn eine „1“ gefunden wurde, position dieser „1“ merken.
2.) zeilen spalten vergleichen (aber nicht nur einmal, wir wollen ja ALLE möglichkeiten haben)
3.) dann von der position dieser 1, (jetzt wirds kompliziert, ich versuche es bildlich darzustellen), eine zeile nach unten ( zwei variablen definieren, die eine bei jedem durchlauf der schleife +1 die andere -1), wenn keine „1“ gefunden wurde, wieder ne zeile runter , wieder +1 -1 der beiden variablen usw. usw.
zeichnung um zahl schräg zu finden:
Legende: (1) dreieck
[0] die zahl die überprüft wird im moment
(1)0 0 0 0 0 0 0
0[0]0 0 0 0 0 0