Announcement

Collapse
No announcement yet.

Su do ku problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Su do ku problem

    Hallo Leute!!

    Habe arge Probleme einen effizienten C# Algorithmus zu schreiben..

    Ich brauche DRINGEND eure Hilfe

    Wäre seeehr nett

    Hier die .cs datei zum Download
    http://rapidshare.com/files/271922342/sudoku.cs.html

    Mit freundlichsten Grüßen

    Grav

  • #2
    Wenn du den Quelltext willst...

    http://www.marquardtnet.info/cecke/p.../4_sudoku.html
    Christian

    Comment


    • #3
      hier ein wenig code für euch...

      Danke schonmal


      using System;
      using System.Collections.Generic;
      using System.Text;

      namespace sudoku
      {
      class sudoku
      {
      private int[] values_right = new int[81];

      private int[] squareindex = new int[81] {0, 0, 0, 1, 1, 1, 2, 2, 2,
      0, 0, 0, 1, 1, 1, 2, 2, 2,
      0, 0, 0, 1, 1, 1, 2, 2, 2,
      3, 3, 3, 4, 4, 4, 5, 5, 5,
      3, 3, 3, 4, 4, 4, 5, 5, 5,
      3, 3, 3, 4, 4, 4, 5, 5, 5,
      6, 6, 6, 7, 7, 7, 8, 8, 8,
      6, 6, 6, 7, 7, 7, 8, 8, 8,
      6, 6, 6, 7, 7, 7, 8, 8, 8};

      private int[] posible_values = new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

      public sudoku()
      {
      this.generate();
      }

      public void generate()
      {
      /*
      int[] values = {8, 4, 6, 3, 5, 1, 7, 9, 2,
      5, 1, 3, 9, 2, 7, 4, 6, 8,
      7, 9, 2, 6, 8, 4, 1, 3, 5,
      4, 3, 8, 5, 7, 9, 6, 2, 1,
      1, 7, 9, 2, 4, 6, 5, 8, 3,
      2, 6, 5, 8, 1, 3, 9, 7, 4,
      6, 8, 1, 7, 3, 5, 2, 4, 9,
      9, 2, 4, 1, 6, 8, 3, 5, 7,
      3, 5, 7, 4, 9, 2, 8, 1, 6};
      */


      Random rnd = new Random();
      int i;



      for (i = 0; i < 81; i++)
      {
      while (this.values_right[i] == 0)
      this.values_right[i] = rnd.Next(1, 90) % 10;


      while (check_position(i) == 0)
      {
      this.values_right[i] = (this.values_right[i] + 1) % 10;

      }
      }

      }

      public int[] get_values_right()
      {
      return values_right;
      }

      int check_position(int i)
      {
      if (this.values_right[i] == 0)
      return 0;

      Random rnd = new Random();
      int row = i - (i % 9);
      int col = i % 9;
      int position;

      for (position = row; position < row + 9; position++)
      {
      if (position == i)
      continue;

      if (this.values_right[position] == this.values_right[i])
      return 0;
      }

      /*for (position = col; position < 80; position += 9)
      {
      if (position == i)
      continue;

      if (this.values_right[position] == this.values_right[i])
      return 0;
      }*/


      return 1;
      }
      }
      }

      Comment


      • #4
        um was gehts denn überhaupt? brute force lösen von sudoku? Sudoku erzeugen? Logisches lösen von Sudoku?

        ka -.-

        Comment


        • #5
          In dieser Form kann man Code sowieso nicht lesen, siehe Formatierung von C#-Code

          Du willst Hilfe von uns, also musst du uns auch alle sinnvollen und nötigen Informationen geben: Was willst du mit diesem Code erreichen, warum hast du es so versucht, woran scheiterst du bisher (Fehlermeldung vom Compiler - welche - oder Fehler zur Laufzeit - welche - oder unerwartetes Arbeitsergebnis oder was auch immer).

          Jürgen

          Comment


          • #6
            Hallo Allerseits..
            Ich will ein programm erstellen, wechlches ein Sudoku-Game generiert..
            Der unten eingefügte Code soll das Array mit Zufallszahlen füllen und schauen, ob Sie in einer reihe, einer spalte oder in einem 9,9 Array mehrfach vorkommen und dann durch geeignete andere ersetzen..

            Mein Problem ist die Gestaltun der for-schleifen hierfür..
            Wenn ich nur die Reihen auf Unique überprüfe - kein Problem
            Wenn ich nur die Spalten auf Unique überprüfe - kein Problem

            Doch wenn ich die beiden for-schleifen nacheinander laufen lasse, stürzt das Programm ab, bleibt hängen, wie auch immer, dies ist, weil die Schleifen dann zu lange brauchen um zu durchlaufen

            Ich suche also eine geeignete "Verschachtelung" der for schleifen, sodass nach jeder Random in einer Reihe, schon eine Random in einer Spalte erzeugt wird, sodass sich gleiche Zahlen schon automatisch in Col´s und Row´s ausschließen..



            [highlight=c#]
            using System;
            using System.Collections.Generic;
            using System.Text;

            namespace sudoku
            {
            class sudoku
            {
            private int[] values_right = new int[81];

            private int[] squareindex = new int[81] {0, 0, 0, 1, 1, 1, 2, 2, 2,
            0, 0, 0, 1, 1, 1, 2, 2, 2,
            0, 0, 0, 1, 1, 1, 2, 2, 2,
            3, 3, 3, 4, 4, 4, 5, 5, 5,
            3, 3, 3, 4, 4, 4, 5, 5, 5,
            3, 3, 3, 4, 4, 4, 5, 5, 5,
            6, 6, 6, 7, 7, 7, 8, 8, 8,
            6, 6, 6, 7, 7, 7, 8, 8, 8,
            6, 6, 6, 7, 7, 7, 8, 8, 8};

            private int[] posible_values = new int[9] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            public sudoku()
            {
            this.generate();
            }

            public void generate()
            {
            /*
            int[] values = {8, 4, 6, 3, 5, 1, 7, 9, 2,
            5, 1, 3, 9, 2, 7, 4, 6, 8,
            7, 9, 2, 6, 8, 4, 1, 3, 5,
            4, 3, 8, 5, 7, 9, 6, 2, 1,
            1, 7, 9, 2, 4, 6, 5, 8, 3,
            2, 6, 5, 8, 1, 3, 9, 7, 4,
            6, 8, 1, 7, 3, 5, 2, 4, 9,
            9, 2, 4, 1, 6, 8, 3, 5, 7,
            3, 5, 7, 4, 9, 2, 8, 1, 6};
            */


            Random rnd = new Random();
            int i;



            for (i = 0; i < 81; i++)
            {
            while (this.values_right[i] == 0)
            this.values_right[i] = rnd.Next(1, 90) % 10;


            while (check_position(i) == 0)
            {
            this.values_right[i] = (this.values_right[i] + 1) % 10;

            }
            }

            }

            public int[] get_values_right()
            {
            return values_right;
            }

            int check_position(int i)
            {
            if (this.values_right[i] == 0)
            return 0;

            Random rnd = new Random();
            int row = i - (i % 9);
            int col = i % 9;
            int position;

            for (position = row; position < row + 9; position++)
            {
            if (position == i)
            continue;

            if (this.values_right[position] == this.values_right[i])
            return 0;
            }

            /*for (position = col; position < 80; position += 9)
            {
            if (position == i)
            continue;

            if (this.values_right[position] == this.values_right[i])
            return 0;
            }*/


            return 1;
            }
            }
            }
            [/highlight]

            Comment


            • #7
              Hallo,

              wenn es nicht gelingt den Algorithmus selbst zu erstellen kann man sich immer an bestehenden Lösungen orientieren. Warum machst du das nicht?

              Sudoku Solver and Generator
              Sudoku Generator and Solver in C#


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Danke für die Antwort..
                Aber diese Lösungen sind ganz anders.. ich arbeite ja nur mit einer Variable...

                Wäre nett, wenn Ihr mir helfen könntet

                Von den anderen Lösungen kann ich leider ncihts ableiten...


                grüüße

                Comment


                • #9
                  Von den anderen Lösungen kann ich leider ncihts ableiten...
                  Du hast sie ja gar nicht erst angesehen....
                  Christian

                  Comment


                  • #10
                    Aber diese Lösungen sind ganz anders..
                    Wieso sind sie anders? Sie erstellen ein Sudoku - das willst du doch?

                    ich arbeite ja nur mit einer Variable...
                    Es wird schon Gründe geben warum ein Sudoku (ist für mich als Matrix darstellbar) mit mehreren Variablen erstellt wird.


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Schon ein seltsames forum...

                      Es geht ja soweit, ich hab nur probleme bei den for-schleifen...

                      Aber wenn ihr ja nur auf besehende Sudokus hinweist..., Das hilft mir in diesem Moment leider nicht weiter..

                      Comment


                      • #12
                        Schon ein seltsames forum...
                        Aber diese Lösungen sind ganz anders..
                        Meinst du nicht, du könntest dein Problem lösen, in dem du dir Algos von exisitierenden Lösungen ansiehst?

                        Keiner wird dir hier auf Nachfrage ein Algo für eine Sortierung enwickeln, sondern wohl immer auf schon bestehende hinweisen

                        Des Weiteren ist dein Ansatz mit

                        Wenn ich nur die Reihen auf Unique überprüfe - kein Problem
                        Wenn ich nur die Spalten auf Unique überprüfe - kein Problem
                        falsch, da in einem Sudoku ebenfalls die 3x3 Blöcke unique sein müssen.

                        ich arbeite ja nur mit einer Variable...
                        Warum diese Anforderung besteht mit nur einer Variablen zu arbeiten ist ebenfalls unklar
                        Christian

                        Comment


                        • #13
                          Im übrigen wirst du wahrscheinlich keine Probleme mit den Schleifen haben und dein Programm stürzt auch nicht ab. Vielmehr solltest du zwischendurch mal die Nachrichtenverarbeitung von Windows zulassen
                          Christian

                          Comment


                          • #14
                            Ich habe es geschafft....

                            War ein kleiner Denkfehler, auf den IHR auch sicher schnell gekommen wäret, wenn ihr einmal in den Code geschaut hättet..

                            Comment


                            • #15
                              Aber nun hastes auch selbst geschafft und hast an Erfahrung dazu gewonnen Das ist viel mehr Wert als wenn Dir hier irgendwer schnell schnell eine Lösung präsentiert hätte.

                              Comment

                              Working...
                              X