Programa C++ Problema do Formigueiro
Por: thepablodc • 11/4/2021 • Trabalho acadêmico • 1.035 Palavras (5 Páginas) • 143 Visualizações
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int formiga(int caminho[10][10], float feromonio[10][10], int comeco, int final, int marcado[10]){
float fer[10][10];//=feromonio;
for(int aux=0;aux<=9;aux++){
for(int aux2=0;aux2<=9;aux2++){
fer[aux][aux2]=feromonio[aux][aux2];
}
}
float cont;
if(comeco==final){ //checando se condicao de termino foi encontrada
for(int aux=0;aux<=9;aux++){ //passando o coeficiente de evaporacao para todos os caminhos
for(int aux2=0;aux2<=9;aux2++){
feromonio[aux][aux2]=feromonio[aux][aux2]*0.9; //evaporacao de 10%
}
}
for(int aux=0;aux<=9;aux++){ //contando os lugares percorridos
if(marcado[aux]>0){
cont++;
}
}
cont--;
cont=5/cont; //definindo o feromonio a ser depositado nos lugares
for(int aux=0;aux<=9;aux++){
for(int aux2=0;aux2<=9;aux++){
feromonio[aux2][aux]=feromonio[aux2][aux]+fer[aux2][aux];
}
}
for(int aux=0;aux<=9;aux++){
for(int aux2=0;aux2<=9;aux2++){
feromonio[aux][aux2]=fer[aux][aux2];
}
}
return 1;
}
int perc[10]; //vetor mostrando o caminho percorrido
for(int aux=0;aux<=9;aux++){ //pegando o caminho percorrido ate agora
perc[aux]=marcado[aux];
}
int dif; //contador de caminhos possiveis
int som=0; //somatoria numerica de todo o feromonio dos caminhos possiveis
int perco[10]; //indicativo dos caminhos que podem ser percorridos
for(int aux=0;aux<=9;aux++){
if(caminho[comeco][aux]==1){
perco[aux]=1;
som=som+feromonio[comeco][aux]*100; //somando o feromonio
dif++; //contando a quantidade de caminhos diferentes
}
}
int VET[som];
int atual=0;
int marc=0;
int somatoria=0;
for(int aux=1;aux<dif;aux++){
while(perco[marc]<=0){
marc++;
}
for(int aux2=atual;aux2<=atual+perc[marc];aux2++){
VET[aux2]=aux;
}
atual=atual+perco[marc];
}
int com=rand()%(som);
formiga(caminho,fer,com,final,perc); //recursividade para seguir pro proximo local
}
int main(){
string algo;
int marcado[10]={1,0,0,0,0,0,0,0,0,0}; //vetor com o ponto de partida marcado
int caminho[10][10]; //matriz com todos os caminhos possiveis
float feromonio[10][10]= {0, 1, 1, 0, 0,
...