7x7 - Matrix nach Muster durchsuchen

Hallo,

ich suche den Algorithmus für folgendes Problem:
Es soll eine 7x7 - Matrix nach einem Muster, welches aus 7 Ziffern besteht, durchsucht werden. Es können nur die Ziffern 1 - 6 auftreten.
Es muss:

  • von links nach rechts und umgekehrt gesucht werden
  • von oben nach unten und umgekehrt gesucht werden
  • diagonal aus jeder der 4 Ecken

Gibt es sowas und wenn ja, wo? Oder kann mir hier jemand helfen?

Danke!

ich suche den Algorithmus für folgendes Problem:
Es soll eine 7x7 - Matrix nach einem Muster, welches aus 7
Ziffern besteht, durchsucht werden. Es können nur die Ziffern
1 - 6 auftreten.
Es muss:

  • von links nach rechts und umgekehrt gesucht werden
  • von oben nach unten und umgekehrt gesucht werden
  • diagonal aus jeder der 4 Ecken

Bitte, was willst du? Kannst du dich etwas genauer ausdrücken?

was du machen kannst ist:

for i=1…7
for j=i…7
A(i,j)
end for
end for

deine i-Komponente läuft von oben nach unten und deine j-Komponente von links nach rechts. Und was willst du mit den Diagonalen?

x303

PS: was sind bei dir 7 Ziffern? meinst du von 1-6? oder doch eher von 0-6?

also: ich meine die Ziffern 1 - 6. Die gesuchte Zahlenfolge besteht aus 6 Ziffern von 1 - 6. Bsp: 3 2 4 1 5 3 6

Diese soll in der Matrix gesucht werden.

Beispiel-Matrix:

also: ich meine die Ziffern 1 - 6. Die gesuchte Zahlenfolge
besteht aus 6 Ziffern von 1 - 6. Bsp: 3 2 4 1 5 3 6

1 3 5 4 6 2 1
4 2 5 1 6 1 4
5 4 1 2 3 5 6
6 1 5 2 2 4 4
1 5 2 1 1 6 6
6 3 1 5 5 2 3
1 6 3 2 2 5 1

In dieser Matrix steckt die Folge in der zweiten Spalte von oben nach unten

Hallo Andreas,

man nehme

- eine beliebige programmiersprache
- überlege sich
 - wie kann ich bei zwei Zahlen feststellen, ob sie gleich sind
 -\> wie kann ich bei 2 Zahlenreihen von je 7 festellen ob sie gleich sind (evt. dafür eine spezialfunktion im Sprachschatz)
 - wie bekomme ich die erste Zeile als Zahlenreihe von links nach rechts
 -\> wie bekomme ich alle Zeilen als Zahlenreihen von links nach rechts
 -\> wie bekomme ich alle Zeilen als Zahlenreihen von rechts nach links
 - wie bekomme ich die Diagonale von oben links nach unten rechts als Zahlenreihe
 -\> wie bekomme ich alle 4(!) Diagonalen als Zahlenreihe

 ===\> für jede bekommen Zahlenreihe verwende ich den algorithmus der Zahlenprüfung.

Gruß achim

mag albern klingen, aber programmierung ist albern. Dauert ein paar Minuten. Und Verbessern kannst Du immer noch, wenn es funktioniert. und mit ein paar Jahren Erfahrung kannst Du es in wenigen Minuten auf vielleicht 3 Zeilen reduzieren, die dann auch nach Stunden nicht zuverlässig funktionieren :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

also: ich meine die Ziffern 1 - 6. Die gesuchte Zahlenfolge
besteht aus 6 Ziffern von 1 - 6. Bsp: 3 2 4 1 5 3 6

1 3 5 4 6 2 1
4 2 5 1 6 1 4
5 4 1 2 3 5 6
6 1 5 2 2 4 4
1 5 2 1 1 6 6
6 3 1 5 5 2 3
1 6 3 2 2 5 1

D.h. du suchst eine Zeile, Spalte oder Diagonale, in der jede Zahl von 1-6 mindestens einmal vorkommt, richtig?

Ich würde jede Zeile durchlaufen, ein Array mit 6 Elementen intialisieren, und dann zählen, wie häufig welche Zahl vorkommt:

for (int y = 0; y 6 vorkommen:
 count[A[x][y] - 1]++;
 }
 // jetzt zählen, wie viele Zahlen mindestens einmal vorkommen ist:

 int n = 0;
 for (int i = 0; i 0){
 n++;
 }
 }
 if (n == 6){
 // hurra, die Zeile y entspricht unseren Bedingungen
 }
}

Das ganze für Spalten und Diagonalen bekommst du dann sicher auch hin.
Das ganze funktioniert sehr elegant für beliebig große Matrizen, in denen ganze Zahlen stehen von begrenzter[1] Größe stehen.

Ich verwende so etwas ähnliches, um für Lösungen nach Sudokus zu suchen :wink:

Grüße,
Moritz

[1] wenn die Größe der Zahlen in der Größenordnung der Dimension der Matrix steht, ist das recht schnell. Sonst muss man sich was besseres überlegen.

Servus

Hallo,

also: ich meine die Ziffern 1 - 6. Die gesuchte Zahlenfolge
besteht aus 6 Ziffern von 1 - 6. Bsp: 3 2 4 1 5 3 6

1 3 5 4 6 2 1
4 2 5 1 6 1 4
5 4 1 2 3 5 6
6 1 5 2 2 4 4
1 5 2 1 1 6 6
6 3 1 5 5 2 3
1 6 3 2 2 5 1

D.h. du suchst eine Zeile, Spalte oder Diagonale, in der jede
Zahl von 1-6 mindestens einmal vorkommt, richtig?

so wie ich das verstanden habe, soll der „count-Vektor“ in der „Matrix A“ komplett enthalten sein, oder?

Ich würde jede Zeile durchlaufen, ein Array mit 6 Elementen
intialisieren, und dann zählen, wie häufig welche Zahl
vorkommt:

Mein Vorschlag (nur für die Zeilen, und auch nur in eine Richtung, für die andere Richtung den vektor vek einfach umdrehen, für die Spalten läuft es analog (Indizes ändern) und für die Diagonale ist es dann auch nicht schwer(Vergleich die Komponenten A[i][i] mit vek[i] ))

int vek[6] // gegeben
int A[6][6] // gegeben

for (int y = 0; y 

gute N8

x303

Hallo,

der Lösungsvorschlag von X303 trifft den Nagel auf den Kopf. Ich suche die komplette Ziffernfolge (den Vektor, bestehend aus 7 Ziffern).

Danke, X303, das ist die Lösung! Danke auch an die Anderen