Jump to content

Parcurgere matrice pe coloane


Graham777

Recommended Posts

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;

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • Moderators

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • 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.