Jump to content

Recommended Posts

Posted

Salut! Se da un sudoku, sub forma de matrice 9*9 si se cere verificarea acestuia, daca este sau nu sudoku. Am construit o functie care bifeaza aparitia fiecarei cifre de la 1 la 9 intr-un vector cu 9 cifre, iar in caz adevarat, se returneaza 1. Vreau sa verific proprietatea atat pe coloane, cat si pe linii. Pentru linii am folosit

for (i=1; i<=9; i++)
  if(f(a[i])==1)
  cout<<"linia"<<i;

Pentru coloane nu reusesc sa-i dau de cap. Cum ar trebui sa arate?

Functia f arata cam asa.

int f(int a[10])
{
    int i,b=1;
    for(i=1; i<=9; i++)
    a[i]++;
    for (i=1; i<=9; i++)
        if(a[i]!=1)
        b=0;
    if(b)
        return 1;

 

Posted

Ai dreptate, am greșit.

#include<iostream>
#include<fstream>
using namespace std;
int cif[10];
int liniar(int a[10])
{
    int i,c=9;
    for (i=1; i<=9; i++)
        cif[a[i]]++;
    for (i=1; i<=9; i++)
        if(cif[i]!=1)
        c--;
    if(c==9)
        return 1;
    else
        return 0;
}
int main()
{
    int matrice[10][10],l=0;
    ifstream f("matrice.txt");
    int i, j;
    for (i=1; i<=9; i++)
        for (j=1; j<=9; j++)
        f>>matrice[i][j];
    for (i=1; i<=9; i++)
    {
        for (j=1; j<=9; j++)
            cif[j]=0;
        if(liniar(matrice[i]))
            l++;
    }
    if(l==9)
        cout<<"bun";
    else
        cout<<"nu e";
    return 0;
}

Am parcurs fiecare linie și am văzut dacă are toate elementele de la 1 la 9. Trebuie văzute și coloanele, iar apoi, împărțită matricea mare în 9 submatrici de 3*3 și văzut dacă acolo sunt toate.

  • Moderators
Posted

La aia cu linia as fi facut gen

bool linie_valida(int lin[]) {
    int cifre[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    for(int i = 1; i <= 9; i++)
        cifre[lin[i]]++;
    
    for(int i = 1; i <= 9; i++)
        if(cifre[i] != 1)
            return false;
    return true;
}

La coloane poţi face o funcţie care transformă o coloană într-un vector gen

void transf(int indice_coloana, int elemente[])

şi aplici funcţia de mai sus asupra vectoruui elemente.

La submatrice poţi face o funcţie care verifică submatricea 3 x 3 cu indicii din stânga sus transmişi ca parametri

bool verificare_submatrice(int lin, int col)

şi apeleţi funcţia pentru fiecare dintre cele 9 submatrici:

bool submatrici_valide() {
    for(int lin = 1; lin <= 7; lin += 3)
        for(int col = 1; col <= 7; col += 3)
            if( !submatrice_valida(lin, col) )
                return false;
    return true;
}

Ceva de genu' :D

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.