-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcaixeiroViajanteAtiv.c
More file actions
229 lines (180 loc) · 4.64 KB
/
Copy pathcaixeiroViajanteAtiv.c
File metadata and controls
229 lines (180 loc) · 4.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define V 5
#define qAresta 20
#define nullAresta 0
#define qtdComb 24
// como representar em lista de arestas?
struct Aresta{
int vEmergente;
int vIncidente;
float peso;
}aresta[qAresta];
struct Caixeiro{
int combinacao[V+1];
float custo;
}combCaxViaj[qtdComb];
int posCx = 0;
struct Caminho{
char texto[8*V];
}caminho[V];
float vetorCusto[V];
int mAdj[V][V];
//funções
void inicializar();
void inicializarAresta();
void imprimirListaAresta();
void imprimirMatriz();
void transformarArestaEmMatriz();
void transformarMatrizEmAresta();
void imprimirVetorCusto();
void imprimirCaminhos();
void caixeiro(int vInicio);
void imprimirCaixeiro();
void buscarMenorRota();
void calcularPesos();
void combinacoes(
);
void main(void){
inicializar();
imprimirMatriz();
transformarMatrizEmAresta();
imprimirListaAresta();
caixeiro(3);
imprimirCaixeiro();
buscarMenorRota();
}
// criar a função de inicialização
void inicializar(){
setlocale(LC_ALL,"Portuguese");
int i, j;
for(i = 0; i < V; i++)
vetorCusto[i] = 8015056586684760100;
for(i = 0; i < V;i++)
for(j = 0; j < V;j++)
mAdj[i][j] = nullAresta;
//vertice 0
mAdj[0][1] = 2;
mAdj[0][2] = 1;
mAdj[0][3] = 12;
mAdj[0][4] = 3;
//vertice 1
mAdj[1][0] = 2;
mAdj[1][2] = 3;
mAdj[1][3] = 6;
mAdj[1][4] = 4;
//vertice 2
mAdj[2][0] = 1;
mAdj[2][1] = 3;
mAdj[2][3] = 1;
mAdj[2][4] = 5;
//vertice 3
mAdj[3][0] = 12;
mAdj[3][1] = 6;
mAdj[3][2] = 1;
mAdj[3][4] = 15;
//vertice 4
mAdj[4][0] = 3;
mAdj[4][1] = 4;
mAdj[4][2] = 5;
mAdj[4][3] = 15;
}
// criar a função de impressão da matriz
void imprimirMatriz(){
int i,j;
for(i=0;i<30;i++) printf("=");
printf("\n Matriz \n");
for(i=0;i<30;i++) printf("-");
printf("\n");
for(i=0;i < V;i++){
for(j=0;j< V;j++){
printf("%d\t",mAdj[i][j]);
}
printf("\n");
}
for(i=0;i<30;i++) printf("=");
printf("\n");
}
void imprimirListaAresta(){
int i;
for(i=0;i<30;i++) printf("=");
printf("\n Lista de aresta \n");
for(i=0;i<30;i++) printf("-");
printf("\n");
for(i = 0; i < qAresta; i++){
printf("\t%d ==> %d\t%.f\n",aresta[i].vEmergente,aresta[i].vIncidente,aresta[i].peso);
}
for(i=0;i<30;i++) printf("=");
printf("\n");
}
void transformarMatrizEmAresta(){
// a partir da matriz de incidencia gera-se a lista de aresta
int i, j, k = 0;
for(i = 0; i < V;i++){
for(j = 0; j < V;j++){
if(mAdj[i][j] != nullAresta){
aresta[k].vEmergente = i;
aresta[k].vIncidente = j;
aresta[k].peso = mAdj[i][j];
k++;
}
}
}
}
void imprimirVetorCusto(){
int i;
printf("\n\n--------- Vetor Custos --------\n");
for(i = 0; i < V;i++){
printf("%.f\n",vetorCusto[i]);
}
printf("\n\n--------------------------\n");
}
void imprimirCaminhos(){
int i, j;
printf("\n\n--------------- Vetor Caminhos com Custo ------------------\n");
for(i=0;i < V;i++){
printf("Custo = %.f\t%s\n",vetorCusto[i],caminho[i].texto);
}
printf("\n--------------------------------------------------------\n");
}
void caixeiro(int vInicio){
//criar um vetor com os vertices diferentes de vInicio
//criar um vetor auxiliar temporário para armazenar as combinações
// e criar outro vetor para marcar os números já utilizados
// cria todas as combinações do vetor com números distintos e armazenar
// na estrutura Caixeiro a partir da função
combinacoes();
// Na estrutura do caixeiro não esqueça de adicionar
// o primeiro e ultimo elemento que é vInicio ex: vInicio = 1
// combCaxViaj[10] = 1 0 2 3 4 1
//Após criar todas as combinações chamar a função calcular
// os pesos dos caminhos gerados
calcularPesos();
}
void combinacoes() {
}
void calcularPesos(){
}
void buscarMenorRota(){
int i, posicao;
// criar a busca do menor valor, isto é, percorrer o vetor
// em busca do menor igual em ED1
printf("\n\nA menor Rota é : ");
for(i = 0; i < V+1; i++){
printf("%d ", combCaxViaj[posicao].combinacao[i]);
}
printf(" com custo: %0.f\n",combCaxViaj[posicao].custo);
}
void imprimirCaixeiro(){
printf("\n\n======================= Caixeiro Viajante =========================\n");
int i, j, k;
for(i = 0; i < qtdComb; i++){
for(j = 0; j < V; j++){
printf("%d ",combCaxViaj[i].combinacao[j]);
}
printf("%d\t%0.f\n",combCaxViaj[i].combinacao[j],
combCaxViaj[i].custo);
}
printf("\n\n===================================================================\n");
}