TProcura
Biblioteca em C++ para testes paramétricos de algoritmos, e coleção de algoritmos de procura e otimização
Loading...
Searching...
No Matches
OitoDamas.cpp
Go to the documentation of this file.
1#include "OitoDamas.h"
2#include <stdio.h>
3#include <string.h>
4
5int COitoDamas::nDamas = 8; // número de damas desta instância
6
8{
9}
10
12{
13}
14
16{
18 damas.Count(0);
20}
21
22
23void COitoDamas::Debug(void)
24{
25 for (int i = 0; i < nDamas; i++) {
26 printf("\n");
27 for (int j = 0; j < nDamas; j++) {
28 int cor = ((i + j) % 2 ? ' ' : ':');
29 if (damas.Count() > i && damas[i] == j)
30 printf("%c%c", '#', '#');
31 else
32 printf("%c%c", cor, cor);
33 }
34 }
35}
36
37void COitoDamas::TesteManual(const char* nome) {
38 instancia = { NULL, 8,4,MAX_DAMAS, NULL, NULL };
40}
41
42// e gerada uma nova solucao aleatoriamente.
44{
46 for (int i = 0; i < nDamas; i++)
48}
49
50// Retorna o valor da solucao completa actual.
52{
53 custo = 0;
55 // calcular o numero de pares de damas atacadas
56 for (int i = 0; i < nDamas - 1; i++)
57 for (int j = i + 1; j < nDamas; j++)
58 if (damas[i] == damas[j] || damas[i] - damas[j] == i - j || damas[i] - damas[j] == j - i)
59 custo++;
60 return custo;
61}
62
64{
65 // trocar a posicao de cada dama
66 for (int i = 0; i < nDamas; i++)
67 for (int j = 0; j < nDamas; j++)
68 if (j != damas[i]) {
70 vizinho->damas[i] = j;
71 vizinhos.Add(vizinho);
72 }
74}
75
77{
78 // trocar a posicao de uma das damas (50%)
80}
81
83{
84 int divisao = 1 + TRand::rand() % (nDamas - 2); // divisao tem de ter elementos de um e de outro
85 damas.Count(8);
86 for (int i = 0; i < divisao; i++)
87 damas[i] = ((COitoDamas*)a)->damas[i];
88 for (int i = divisao; i < 8; i++)
89 damas[i] = ((COitoDamas*)b)->damas[i];
91}
92
94{
95 int distancia = 0;
96 for (int i = 0; i < nDamas; i++)
97 if (damas[i] != ((COitoDamas*)a)->damas[i])
98 distancia++;
99 return distancia;
100}
101
102
#define MAX_DAMAS
Definition OitoDamas.h:16
Representa um estado do problema das 8 damas.
Definition OitoDamas.h:15
void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition OitoDamas.cpp:37
void Cruzamento(TPonto a, TPonto b)
Definition OitoDamas.cpp:82
static int nDamas
Definition OitoDamas.h:22
void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition OitoDamas.cpp:24
void Vizinhanca(TVector< TPonto > &vizinhos)
Definition OitoDamas.cpp:63
void Mutar(void)
Definition OitoDamas.cpp:76
void NovaSolucao(void)
Definition OitoDamas.cpp:43
void Debug(void)
Mostra o estado no ecrã, para debug.
Definition OitoDamas.cpp:70
int Distancia(TPonto a)
Definition OitoDamas.cpp:93
~COitoDamas(void)
Definition OitoDamas.cpp:10
TVector< int > damas
Definition OitoDamas.h:21
TProcuraConstrutiva * Duplicar(void)
Cria um objecto que é uma cópia deste.
Definition OitoDamas.cpp:14
int Avaliar(void)
Definition OitoDamas.cpp:51
COitoDamas(void)
Definition OitoDamas.cpp:6
virtual void Cruzamento(TPonto a, TPonto b)
virtual void Vizinhanca(TVector< TPonto > &vizinhos)
virtual int Avaliar(void)
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
Definition TProcura.h:182
static int resultado
Resultado retornado pelo algoritmo na última execução.
Definition TProcura.h:459
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
Definition TProcura.cpp:104
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
Definition TProcura.h:21
int Count() const
Definition TVector.h:160
int custo
Custo total acumulado desde o estado inicial.
unsigned int rand(int seq)
Retorna o próximo valor pseudo-aleatório.
Definition TRand.cpp:46
int valor
valor do parametro
Definition TProcura.h:114