1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: Pela 0:30 desta Sexta-feira (9 de Dezembro, 23:30 de Quinta-feira nos Açores) o Fórum e restantes sites da ZWAME vão estar offline para manutenção durante cerca de 1h30.
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

sudoku matlab

Discussão em 'Programação' iniciada por desestacio, 8 de Janeiro de 2009. (Respostas: 9; Visualizações: 1435)

  1. boas pessoal
    tenho um grande problema...nao sei como escrever as regras para os numeros nao me repetirem nas linhas e nas colunas.
    o que ja tnh feito é o seguinte...

    Código:
    function [s,ss]=sudoku_(n)
    s=zeros(9);
    N=81;
    for i=1:N, 
    n=round(8*rand()+1);
    x=round(8*rand()+1);
    y=round(8*rand()+1);
    s(x,y)=n;
     
    end
     

    agora nao sei o k fazer aseguir a isto.
    alguem pode dar uma ajudazita?
    desde ja agradecido
    um abraço
     
    Última edição pelo moderador: 8 de Janeiro de 2009
  2. Tomb4000

    Tomb4000 Power Member

    para não se repetirem nas linhas e nas colunas, apenas tens que fazer dois fores, encadeados, ou seja um dentro do outro. com eles percorrer a linha (coluna), e para cada linha (coluna) percorres a sua coluna (linha) e verificas se tem elementos iguais. Não existe grande dificuldade nesse caso.
     
  3. pois...
    e cmo e k eu escrevo isso? por acaso nao podes dar essa ajudinha sff
     
  4. Tomb4000

    Tomb4000 Power Member

    Nao sei bem o que faz o código que colocaste em cima, já que não te deste ao trabalho de explicar, para nos sabermos responder devidamente.

    Mas podes verificar se existem casas com valor repetido, percorrendo cada uma das linhas 1-9 e para cada uma dessas linhas percorrer as suas colunas (ou vice-versa), e dentro disto percorres novamente as linhas e as colunas, para poderes comparar se existem (i,j) e (k,h) nos quais os valores sao iguais, o que nao pode acontecer. serão entao 4 for's (não dois como eu tinha mensionado). Sendo que se i=k e j=h não é erro uma vez que representa o mesmo valor.

    Código:
    
    for (int i=0; i<9; i++)
            {
                for (int j=0;j<9; j++)
                {
                    for (int k=0; k<9; k++)
                    {
                        for (int h=0; h<9; h++)
                        {
    
                            if ( tabela[i,j]) == tabela[k,h] )
                            {
                                if (i!=k || j!=h)
                                {
                                               SE CHEGOU AQUI HA IMCOMPATIBILIDADE entre i,k  e  j,h
                                }
                            }
                        }
                            
                    }
                }
            }
    
    
    Isto serve para verificar erros (escrevi em c++), se é isso que queres, só tens que passar para matlab que não é dificil :P (se é algo disto que realmente precisas).
     
    Última edição: 8 de Janeiro de 2009
  5. Código:
    function [s,ss]=sudoku_(n)
     
    s=zeros(9); cria uma matriz de zeros 9*9
    N=15; variavel
    for i=1:N, vai fazer o ciclo de 1 ate N
    n=round(8*rand()+1); gera um numero aleatorio entre 1 e 9
    x=round(8*rand()+1); gera um numero aleatorio entre 1 e 9
    y=round(8*rand()+1); gera um numero aleatorio entre 1 e 9
    s(x,y)=n; vai colocar o valor de n nas cordenadas x e y na matriz
     
    end
     
    agora preciso que ele nao gere numeros nas mesma coordenadas e que nao se repitam nas linhas e nas colunas.

    é assim eu nao percebo patavina de c++, obrigado pela ajuda. se conseguires passar isso para c agradecia pq acho que sao linguagens parecidas. achas que seras capaz de me ajudar ainda mais

    um abraço
     
  6. Tomb4000

    Tomb4000 Power Member

    para C. Ok eu ajudo...



    Ta quase....




    :tareon:



    Mais um pouco.....


    ta no fim....

    e.........


    Prontos já está. Aquele códio chama-lhe o que quiseres, mas entre c++ e c é o mesmo.

    Alias acho que minto... tens que declarar as variaveis fora dos for's, de resto.....
     
  7. pronto ok...nao e crime nao perceber

    entao cmo e k eu passo isso para matlab?
     
  8. Tomb4000

    Tomb4000 Power Member

    duas opções:

    Pegas nuns livrinhos, numas sebentas e pesquisas na net sobre matlab, e como programar... ciclos, variaveis... bla bla bla.

    OU

    Vens aqui perguntar como se faz.

    Que não saibas e tenhas problemas a pensar num algoritmo ou outro, ok.. parece.me bem pedir ajuda, que à muita boa gente pronta para ajudar.


    Tinha ficado melhor pegares em qualquer coisa, tentares e vinhas aqui e escrias: Isto não dá por isto e por aquilo e bla bla blaaa...

    Faço-me entender?

    Um abraço e da aí umas pesquisas de programação em matlab que o bem é para ti.
     
  9. IComeFromBehind

    IComeFromBehind Power Member

    Mas afinal tu queres verificar repetidos ou gerar um sudoku?

    Se for para verificar repetidos não é preciso teres tantos ciclos for como ali em cima. basta teres 3 funcoes, uma para verificar os quadrados, outra as linhas e outra as colunas. Para ver se todos os numeros são diferentes usas um array de booleanos em que o indice indica o numero na linha/coluna quadrado - 1. Fazes um ciclo para passar as casas e marcas o array. No fim vez se todas as posições estão true.
     
  10. o meu problema e escrever isso!
    sera k m podes ajudar?
    obrigado
     

Partilhar esta Página