67 for (
int j = 0; j <
inst.
M; j++)
68 for (
int i =
inst.
N - 1; i >= 0; i--)
69 if (
Casa(i,j) ==
'.') {
81 int nMax = 0, nMin = 0;
85 i += di, j += dj, k++)
89 case 'x': nMin++;
break;
90 case 'o': nMax++;
break;
92 if (k >=
inst.
K - 1) {
96 case 'x': nMin--;
break;
97 case 'o': nMax--;
break;
108 for (
int linha = 0; linha <
inst.
N; linha++)
115 for (
int coluna = 0; coluna <
inst.
M; coluna++)
136 printf(
" gravidade");
139 for (
int i = 0; i <
inst.
M; i++)
140 printf(
" %c",
'A' + i);
141 for (
int i = 0; i <
inst.
N; i++) {
143 printf(
"%2d", i + 1);
144 for (
int j = 0; j <
inst.
M; j++)
145 printf(
" %c",
Casa(i, j));
146 printf(
" %d ", i + 1);
150 for (
int i = 0; i <
inst.
M; i++)
151 printf(
" %c",
'A' + i);
172 sprintf(str,
"%c%d",
'a' + diferenca %
inst.
M, 1 + diferenca /
inst.
M);
178 instancia = { NULL, 1,1,10, NULL, NULL };
186 for (
int i = 0, index = 0; i <
inst.
N *
inst.
M; i++, index += 2)
187 estado[index >> 6] |= ((uint64_t)
Codigo(
tabuleiro[i])) << (index & 63);
192 static int index[][2] = { {0,1},{1,0}, {1,1}, {1,-1} };
206 for (
int linha = 0; linha <
inst.
N; linha++) {
207 for (
int coluna = 0; coluna <
inst.
M; coluna++) {
208 for (
int dir = 0; dir < 4; dir++) {
209 if ((index[dir][0] > 0 ? linha <=
inst.
N -
inst.
K : 1) &&
210 (index[dir][1] > 0 ? coluna <=
inst.
M -
inst.
K :
211 index[dir][1] < 0 ? coluna >=
inst.
K - 1 : 1))
214 for (
int i = 0; i <
inst.
K && (nMax == 0 || nMin == 0); i++)
215 if (
Casa(linha + i * index[dir][0], coluna + i * index[dir][1]) ==
'x')
217 else if (
Casa(linha + i * index[dir][0], coluna + i * index[dir][1]) ==
'o')
220 if (nMax ==
inst.
K) {
224 else if (nMin ==
inst.
K) {
234 if (nMax > 0 && nMin == 0)
235 qMax[
inst.
K - 1 - nMax]++;
236 else if (nMin > 0 && nMax == 0)
237 qMin[
inst.
K - 1 - nMin]++;
void Sucessores(TVector< TNo > &sucessores)
Coloca em sucessores a lista de estados sucessores.
void Debug(void)
Mostra o estado no ecrã, para debug.
const char * Acao(TNo sucessor)
Retorna a ação (movimento, passo, jogada, lance, etc.) que gerou o sucessor.
bool SolucaoCompleta(void)
Verifica se o estado actual é objectivo (é uma solução completa)
void ResetParametros()
Inicializa os parametros.
TVector< char > tabuleiro
void Codifica(uint64_t estado[OBJETO_HASHTABLE])
Codifica o estado para um vetor de inteiros de 64 bits.
void Copiar(TProcuraConstrutiva *objecto)
bool VerLinha(int i, int j, int di, int dj)
void SolucaoVazia(void)
Coloca o objecto no estado inicial da procura.
void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
TProcuraConstrutiva * Duplicar(void)
Cria um objecto que é uma cópia deste.
int Heuristica(void)
Função para calcular quanto falta para o final, o valor da heurÃstica.
int MaiorAmeaca(TVector< int > &qMin, TVector< int > &qMax, int maxAmeaca)
Utilitário para calculo de uma heurÃstica standard em jogos simples.
bool minimizar
o jogador actual deve minimizar o custo (ou maximizar caso tenha o valor falso)
int Heuristica(void)
chamar após calcular a heurÃstica (grava o valor, dependendo da parametrização)
bool ExisteHeuritica(void)
void ResetParametros()
Método para inicializar os parâmetros (redefinir se forem adicionados parâmetros especÃficos)
static int infinito
valor de infinito (vitoria/derrota), omissao 1000
Representa um estado no espaço de estados.
void NovaLinha(bool tudo=true)
void Reset(Item const &i)
virtual void Sucessores(TVector< TNo > &sucessores)
Coloca em sucessores a lista de estados sucessores.
virtual void SolucaoVazia(void)
Coloca o objecto no estado inicial da procura.
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
virtual void Codifica(uint64_t estado[OBJETO_HASHTABLE])
Codifica o estado para um vetor de inteiros de 64 bits.
int heuristica
Estimativa para o custo até um estado objetivo, se disponÃvel.
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
static int tamanhoCodificado
Número de inteiros de 64 bits utilizados para codificar um objeto (≤ OBJETO_HASHTABLE).
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
int valor
valor do parametro