Sunteți pe pagina 1din 6

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO

DEPARTAMENTO DE INFORMÁTICA

__________________________________________________________________
Trabalho Temático do PET
Processamento de Dados II

Monitores:

Grupo PET

Engenharia de Computação

http://www.inf.ufes.br/~pet

__________________________________________________________________

Junho – 2009
Blocagem de Vagões

1 Motivação

Desde o início do programa, o PET - Engenharia de Computação da UFES vem propondo


trabalhos adicionais aos cursos do Departamento de Informática com o intuito de reforçar os
conceitos aprendidos em sala de aula e de mostrar a aplicabilidade desses conceitos em problemas
reais. Assim, com a aplicação dessa prática pedagógica há um enriquecimento da formação tanto
dos alunos envolvidos na elaboração do trabalho, através do desenvolvimento de práticas como
escrita; quanto dos alunos aos quais o trabalho será aplicado, através da prática de aplicar conceitos
teóricos na solução de problemas reais. Vale ressaltar, que as empresas que trabalham com
transporte ferroviário, passam por problemas semelhantes ao que será proposto, e que o problema
de Blocagem de Vagões é o tema da pesquisa de um dos bolsistas do grupo PET Engenharia de
Computação.

2 Objetivo

Espera-se que os alunos que aceitarem a proposta exercitem a manipulação de vetores de


structs e solidifiquem o conceito de tipo abstrato de dado. Além disso, é necessário que os alunos
tenham em mente que esse trabalho é um pequeno desafio, pois terá que ser implementado em
pouco tempo. Porém, vale ressaltar que todas as dúvidas referentes aos conceitos utilizados no
trabalho serão esclarecidas pelos monitores.

3 Descrição

Em uma ferrovia, a formação dos trens é realizada com base nas demandas dos clientes que
fornecem os carregamentos para que estes sejam transportados por meio de um conjunto de vagões.
Um carregamento é composto basicamente pelas seguintes informações: pátios de origem e destino,
horários de partida e chegada, volume do produto a ser entregue e identificação do cliente.
Sem perda de generalidade, pode-se entender carregamento como o conjunto de vagões
necessários para o transporte de produtos de um determinado cliente. Um trem é formado por um
conjunto de vagões que transportam carregamentos de diversos clientes, com origens e destinos
distintos.

A figura 1 ilustra, uma ferrovia com sete pátios e suas respectivas distâncias:

figura 1
A figura 2 ilustra as possíveis rotas dos trens para transportar três carregamentos com
respectivas origens-destinos dadas pelos pátios 1 e 6, 2 e 6 e 4 e 7 (C16, C26 e C47).

figura 2

Para fins de economia de custos, é interessante que os carregamentos sejam transportados na


ferrovia pelos menores caminhos existentes possíveis entre suas origens e seus destinos.

Alguns Conceitos Importantes

Para resolver o problema proposto será necessário o conhecimento de alguns conceitos simples de Teoria dos
Grafos que são explicados a seguir.

• Grafo

É representado como um conjunto de pontos (vértices) ligados por retas (as arestas).

• Vértices

São os nós do grafo, no problema abordado os vértices representam os pátios da ferrovia.

• Arestas

São as conexões entre os nós, no problema abordado elas representam as distâncias entre os pátios da ferrovia.

• Matriz de adjacência

Uma matriz de adjacência é uma das formas de se representar um grafo.


Dado um grafo G com n vértices, podemos representá-lo em uma matriz M n x n. O valor
mij guarda informações sobre como os vértices vi e vj estão relacionados (isto é, informações sobre
a adjacência de vi e vj).
Para representar um grafo não direcionado, simples e sem pesos nas arestas, basta que as
entradas mij da matriz M contenham 1 se vi e vj são adjacentes e 0 caso contrário. Se as arestas do
grafo tiverem pesos, mij pode conter, ao invés de 1 quando houver uma aresta entre v i e vj, o peso
dessa mesma aresta.
Por exemplo, podemos representar o grafo da figura 1 pela seguinte matriz de adjacência (7x7) que representa
a ferrovia.

Vértices => 1234567

1 0011000
2 0001000
3 1000110
4 1100100
5 0011001
6 0010000
7 0000100

No caso da Matriz de distância as arestas possuem peso, ou seja a distância entre os pátios da ferrovia.

1000 1000 70 70 1000 1000 1000


1000 1000 1000 30 1000 1000 1000
70 1000 1000 1000 20 50 1000
70 30 1000 1000 20 1000 1000
1000 1000 20 20 1000 1000 60
1000 1000 50 1000 1000 1000 1000
1000 1000 1000 1000 60 1000 1000

Observação Importante: As posições na matriz de distâncias, correspondentes a arestas que não existem, devem ser
preenchidas com valores muito altos. No exemplo, o valor adotado foi 1000.

O trabalho

Desenvolva um algoritmo que, dados k carregamentos e seus respectivos pares origem-


destino, a matriz de adjacências do grafo que representa a ferrovia e a matriz de distâncias entre os
pátios, retorne os menores caminhos possíveis para cada carregamento.

4 Entrada

A leitura dos dados será feita através de um arquivo ferrovia.txt que contém as informações
citadas acima.
As matrizes serão no máximo de tamanho 15x15.

Numero_de_Carregamentos

Origem_do_Carregamento_1 Destino_do_Carregamento_1
Origem_do_Carregamento_2 Destino_do_Carregamento_2

Matriz_de_adjacência

Matriz_de_distâncias

Considerações: 1) O número de pares origem-destino é definido pelo número de carregamentos


2) Os dados de Numero_de_Carregamentos, Origem_do_Carregamento, Destino_do_Carregamento e
a Matriz_de_adjacência serão do tipo 'int'.
3) A Matriz_de_distância poderá ser do tipo 'int' ou 'float'.
4) Os dados são separados por uma linha em branco, como pode ser observado no exemplo de entrada.
5) O arquivo de entrada terá uma linha em branco no fim do arquivo

Exemplo do arquivo de entrada:


3 /* número de carregamentos */

16 /* origem e destino do carregamento 1 */


26 /* origem e destino do carregamento 2 */
47 /* origem e destino do carregamento 3 */

0011000 /* matriz de adjacência */


0001000
1000110
1100100
0011001
0010000
0000100

1000 1000 70 70 1000 1000 1000 /* matriz de distância */


1000 1000 1000 30 1000 1000 1000
70 1000 1000 1000 20 50 1000
70 30 1000 1000 20 1000 1000
1000 1000 20 20 1000 1000 60
1000 1000 50 1000 1000 1000 1000
1000 1000 1000 1000 60 1000 1000

5 Saída

A saída deverá ser salva em um arquivo saida.txt e deverá apresentar os caminhos


percorridos para o transporte dos carregamentos e suas respectivas distâncias totais.
Observação importante: Os caminhos e respectivos custos devem ser impressos em ordem
crescente de custo, ou seja, primeiro o menor caminho, depois o segundo menor, e assim por diante.
 saida.txt

Carregamento1
Caminho1: patios_do_caminho1
Custo1: valor_do_custo1

Caminho2: patios_do_caminho2
Custo2: valor_do_custo2


Carregamento2
Caminho1: patios_do_caminho1
Custo1: valor_do_custo1

...

Considerações: 1) O arquivo de saída deverá ser exatamente igual ao modelo


2) Os pátios devem ser separados por espaço
3)O custo deverá ser representado com duas casa decimais
Exemplo do arquivo de saída:

C16
Caminho1: 1 3 6
Custo1: 120.00

Caminho2: 1 4 5 3 6
Custo2: 160.00

C26
Caminho1: 2 4 5 3 6
Custo1: 120.00

Caminho2: 2 4 1 3 6
Custo2: 220.00

C47
Caminho1: 4 5 7
Custo1: 80.00

Caminho2: 4 1 3 5 7
Custo2: 220.00

6 Entrega

O trabalho deverá ser enviado para o e-mail pet@inf.ufes.br até às 23:59:59 do dia 12 de Julho de 2009, com o
assunto no seguinte formato PDII:nome

Exemplo:

assunto: PDII:AdrianaCampos

8 Avaliação

1) Se o trabalho compilar, exibir o resultado esperado, o grupo receberá nota 10. Obviamente, o não cumprimento de
alguma das especificações implicará em redução da nota, proporcionalmente à gravidade do erro.
2) Qualquer suspeita de plágio implicará em nota ZERO para todos os envolvidos.
3) Se o trabalho não compilar também implicará em nota ZERO.

Bom trabalho!

S-ar putea să vă placă și