Photolog
Back to list of problems
The Postal Worker Rings Once
117.c
#include <stdio.h>
#include <string.h>
#include <limits.h>
int array[26][26];
int visited[26];
void
init(void)
{
int i,j;
for(i=0; i<26; i++) {
visited[i]=0;
for(j=0; j<26; j++) {
array[i][j]=0;
}
}
}
int
min_dist(int ini, int fin)
{
int i;
int min;
min=INT_MAX;
if (ini==fin) {
return 0;
}
visited[ini]=1;
for(i=0; i<26; i++) {
if (array[ini][i] && !visited[i]) {
int a = array[ini][i]+min_dist(i,fin);
if (a<min) {
min=a;
}
}
}
visited[ini]=0;
return min;
}
void
calc(void)
{
int tot_len=0;
int i,j;
int streets;
int ini=-1, fin=-1;
for(i=0; i<26; i++) {
streets=0;
for(j=0; j<26; j++) {
if (array[i][j]) {
if (j>i) {
tot_len += array[i][j];
}
streets++;
}
}
if (streets%2) { /* Impar */
if (ini==-1) {
ini=i;
} else if (fin==-1) {
fin=i;
} else {
exit(3);
}
}
}
tot_len += min_dist(ini, fin);
printf("%d\n", tot_len);
}
int
main(void)
{
char string[1024];
init();
while(1) {
int a,b,len;
if (scanf("%s", string)!=1) {
break;
}
if (!strcmp(string, "deadend")) {
calc();
init();
continue;
}
len = strlen(string);
a = string[0]-'a';
b = string[len-1]-'a';
array[a][b] = array[b][a] = len;
}
exit(0);
}









