The question asks to calculate the smallest distance between cities. The geographical coordinate of each region was given.
The correct output would be:
1646.3
189.9
My output was incorrect in the second calculation:
1646.3
181.1
URI problem link: link
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define INFINITO 100000000
struct cidade {
char nome[15];
int numRoteadores;
int *coord_x;
int *coord_y;
};
typedef struct cidade *Cidade;
Cidade newCidade(char nome[15], int numRoteadores) {
Cidade cidade = (Cidade) malloc(sizeof *cidade);
strcpy(cidade->nome, nome);
cidade->numRoteadores = numRoteadores;
cidade->coord_x = (int *) malloc(numRoteadores * sizeof(int));
cidade->coord_y = (int *) malloc(numRoteadores * sizeof(int));
return cidade;
}
int main() {
int numCidades = -1;
while(numCidades != 0){
scanf("%d", &numCidades);
if(numCidades >= 1 && numCidades <= 1000) {
Cidade cidades[numCidades];
char nomCidade;
int numRoteadores;
for(int i = 0; i < numCidades; i++){
char nome[15];
int numRoteadores;
scanf("%s", nome);
scanf("%d", &numRoteadores);
cidades[i] = newCidade(nome, numRoteadores);
for(int j = 0; j < numRoteadores; j++){
int coord_x, coord_y;
scanf("%d", &coord_x);
scanf("%d", &coord_y);
cidades[i]->coord_x[j] = coord_x;
cidades[i]->coord_y[j] = coord_y;
}
}
float distTotal = 0;
for(int i = 0; i < numCidades - 1; i++){
char nome1[15];
char nome2[15];
Cidade cidade1;
Cidade cidade2;
scanf("%s", nome1);
scanf("%s", nome2);
int j = 0;
int achou = 0;
while(achou < 2){
if(strcmp(cidades[j]->nome, nome1) == 0 || strcmp(cidades[j]->nome, nome2) == 0){
if(achou == 0){
cidade1 = cidades[j];
achou++;
}else{
cidade2 = cidades[j];
achou++;
}
}
j++;
}
float dist = INFINITO;
//Acredito que o problema esteja aqui, onde a distância é calculada
for(int k = 0; k < cidade1->numRoteadores; k++){
for(int l = 0; l < cidade2->numRoteadores; l++){
float newDist = sqrt(pow((cidade2->coord_x[l] - cidade1->coord_x[k] ),2) + pow((cidade2->coord_y[l] - cidade1->coord_y[k]),2));
if(newDist < dist){
dist = newDist;
}
}
}
distTotal += dist;
}
printf("%.1f\n", distTotal);
}
}
}