Determinar os caminhos mínimos entre todos os pares de cidades usandoEssa solução pode ainda ser refinada usando, por exemplo, a capacidade de consumo de cada cidade como um fator multiplicativo (custo= distância*fator) . Esse fator é proporcional à freqüência das viagens a essa cidade e deve ser considerado ao se calcular o 'custo médio' do centro de de distribuição a cada cidade destino. Uma cidade pode ser representada por uma estrutura como:
o algoritmo de Floyd-Warshall dado em sala;
para cada cidade C da região {
calcular a 'distância média' de C para as demais cidades,
usando os resultados do algoritmo de Floyd-Warshall;
}
selecionar a cidade com a menor 'distância média' para implantar o
Centro de Distribuição;
typedef struct cidadeNessa estrutura, o índice da cidade, representado pelo campo idx, pode ser utilizado para se referir ao índice do vértice correspondente no grafo. A tabela de cidades pode ser um vetor onde cada elemento é uma estrutura do tipo descrito acima.
{
int idx; /* índice da cidade */
char *name; /* nome da cidade */
int factor; /* fator (ou capacidade) de consumo */
int w; /* peso 'final' */
} cidade;
int nCidades; /* número de cidades */
Importante: As rodovias podem ser utilizadas nos dois sentidos portanto para cada par (A,B) de cidades conectadas por rodovia, devem ser criadas duas arestas no grafo, uma de A para B e outra de B para A.
A partir do arquivo de entrada deve se construir31Esse arquivo está disponível em distancias.txt.
1 25 Americana
2 35 Campinas
3 10 Rio Claro
4 10 Ribeirao Preto
5 5 Catanduva
6 15 Sao Carlos
7 15 Piracicaba
8 10 Botucatu
9 20 Jundiai
10 30 Sorocaba
11 15 Bauru
12 10 Itu
13 5 Itapetininga
14 50 Sao Paulo
15 10 Avare
16 8 Ourinhos
17 5 Capao Bonito
18 8 Marilia
19 5 Assis
20 8 Presidente Prudente
21 11 Araraquara
22 8 Aracatuba
23 5 Sao Jose do Rio Preto
24 8 Barretos
25 10 Franca
26 8 Votuporanga
27 10 Mogi das Cruzes
28 15 Sao Jose dos Campos
29 20 Santos
30 8 Taubate
31 5 Guaratingueta
-1 -1 xx
1 2 36
1 7 34
1 3 55
6 3 72
6 4 113
6 5 166
6 7 111
6 8 175
8 7 104
8 9 206
8 10 152
8 11 108
10 12 39
10 13 74
10 14 107
8 13 131
8 15 64
16 15 108
2 9 36
14 9 70
12 9 49
12 7 84
13 17 57
16 11 131
16 18 97
16 19 65
20 19 133
18 21 226
18 22 165
18 23 198
18 5 200
18 11 103
5 11 167
5 24 100
5 25 202
24 25 133
24 23 95
5 23 56
22 23 137
26 23 90
26 22 129
14 27 63
14 28 87
14 29 72
28 30 49
31 30 43
-1 -1 -1
Nesse arquivo, nomes de cidades como 'Sao Jose dos Campos' aparecem como 'Sao_Jose_dos_Campos', de forma que é possível usar um único especificador de formato '%s' para sua leitura.
O resultado esperado pode ser encontrado em solucao9.txt.