Problem z tworzeniem algorytmu do gry sudoku

0

Witam, Mam mały problem z kodem do gry sudoku. Konkretnie to działa zbyt wolno dlatego szukam alternatywy dla funkcji rand() .

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
wyliczenie(int x,int vs[],int n,int i){
	
	if(i==n)return 1;
	if(x==vs[i]) return -1;
	return wyliczenie(x, vs, n,i+1);
}
int main(){
	cout<<"Mieszkam";
	int n=5;
	int tablica[n][n];
	srand(time(0));
	//Zerowanie tablicy
	for(int i=0; i<n;i++)
	{
		for(int j=0; j<n;j++)
		tablica[i][j]=0;
	}

	// Wypełnienie tablicy
 for(int i=0; i<n;i++)
    { 
        for(int j=0; j<n;j++)
        {
            bool x=1;
            while(x==1)
            {
                x=0;
                int buffor;
                buffor=1+rand()%n;
                for(int z=0;z<n;z++)
                {
                    if(buffor==tablica[i][z])x=1;
                    if(i>0)
                    {
                        if(buffor==tablica[z][j])x=1;
                    }
                }
                    tablica[i][j]=buffor;
 
            }
        }
    }
    


	//Drukkowanie tablicy
	for(int i=0; i<n;i++)
	{
		cout<<endl;
		for(int j=0; j<n;j++)
		{
			cout<<tablica[i][j]<<"   ";
		
		}
	}
	
	
	return 0;
}
0

Użyj std::vector zamiast tablic.

0

spoko, czy to powinno rozwiązać problem wolnego działania algorytmu? Bo myślałem o stworzeniu funkcji losowania, który będzie losować daną liczbę tylko raz, czy to ma sens?

0

spoko spróbuj jutro ogarnąć ograniczenie pętli dzięki.

0

to działa zbyt wolno

To w ogóle nie działa, a jeśli nawet to zupełnie przypadkiem...

    int n=3;
    int tablica[n][n];
    srand(time(0));
    for(int i=0; i<n;i++)
    {
        for(int j=0; i<n;i++)
        tablica[n][n]=0;
    }

W szczególności to ostatnie tablica[n][n]=0; Rozumiem że dla pewności n^2 razy musisz do nieistniejącego indeksu tablicy wpisać 0? o_O
A dalej jakże ważne instrukcje typu n=n;. Rozumiem ze to też na wszelki wypadek, gdyby akurat n miało inną wartość niz n?
No i sama "logika" (lub jej brak...) generowania tej planszy za pomocą takiego bogo-sorta to chyba żart.

0

Przecież ten program nie ma nic wspólnego z sudoku. Wyświetla jakiś randomowy kwadracik, w moim przypadku coś takiego:

2   1   3   
3   2   1   
1   3   2   

Już lepiej by było jakbyś wpisał na sztywno liczy od 1 do 9 i je wyświetlił, przynajmniej jedna z zasad sudoku byłaby zachowana.
Kiedyś też pisałem algorytm rozwiązujący sudoku i korzystałem z tego: https://www.geeksforgeeks.org/backtracking-set-7-suduku/ może Tobie też się przyda.

0

tak zdaje sobie sprawę że to nie ma wiele wspólnego z prawdziwym sudoku, ale muszą od czego zacząć jak napisze program do uzupełnienie tablicy w sposób by cyfry się nie powtarzały w pionie i poziomie to już coś. Daje poprawioną wersje kodu działa dobrze na 4X4 i dosyć wolno na 5X5 teraz myślę o zastąpieni ostatniej pętli funkcją rekurencyjną to powinno trochę przyspieszyć program.

Wiem że dana funkcja rekurencyjna nie zadziała na tablicy[][] ale to jest prototyp który był testowany na tablicy jedno-wymiarowej (działał poprawnie, więc jedyne co muszą zrobić to przerobić go na tablice[][]).

0

najprościej to wypełnić tablicę prawidłowym przypadkiem, a potem pomieszać wiesze, powieszać kolumny, pomieszać wartości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1