#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 9

int isValueInLineOrColumn(int val, int arr[N][N], int line, int column)
{
    int i,j;

    for (i=0; i < N; i++)
    {
        if(arr[line][i] == val)
            return 1;
            
        if (arr[i][column] == val)
            return 1;
    }

    return 0;
}

int main()
{
    int su[N][N];
    int i, j;
    int cont;

    srand( (unsigned)time(NULL) );//evita que o rand seja gerado pelo tempo

    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            cont=rand()%N;

            if(i==cont || j==cont)
            {

                int val = 1+rand()%N;

                //verifica se já existe este valor na linha ou coluna atual.
                if(isValueInLineOrColumn(val, su, i, j))
                    su[i][j]=0;
                else
                    su[i][j]=val;

            }
            else
            {
                //usando 0 como identificador de vazio
                su[i][j]=0;
            }
        }
    }

    for(i=0; i<N; i++)
    {
        for(j=0; j<N; j++)
        {
            if(su[i][j]!=0)
                printf("[%i]", su[i][j]);
            else
                printf("[ ]");//se for igual a 0 coloca o quadrado vazio.
        }
        printf("\n");
    }

    /*
    for(i=1 ; i <= 10 ; i++)
        printf("Numero %d: %d\n",i, 1+rand()%9);
     */


    return 0;
}