辅导 ECE 36800、讲解 Java/Python语言编程
ECE 36800 Assignment #8
Original Due: 1:00 PM, Tuesday, November 19
Extended: 1:00 PM, Tuesday, November 26
Goal
Consider the following scenario: you want to find an optimal route for your commute to work
while considering factors like traffic, which may change over time. We can model this as a graph
where each edge has a list of weights, such that each element of the list reflects the weight of that
edge after a certain number of steps. For instance, consider the path given by 0 → 1 → 2 → 0 on
the graph below:
The weight of the 0 → 1 edge is initially 1. After taking the first step, the weight of the 1 →
2 edge is 5, and after the second step, the weight of the 2 → 0 edge is 9, so the total weight of the
path is 1 + 5 + 9 = 15.
For simplicity, we only consider graphs where the lists of weights for each edge all have the same
length, called the period. In general, if an edge u → v shows up at position i in the path and has a
weight list of (x1, . . . , xn), it contributes xi mod n to the weight of that path. The goal of this
assignment is to write a program which, given a graph like the one above, and a pair of start/end
vertices, outputs a path from start to end with minimum weight.
Input/Output
As before, your program should take as a command-line argument the name of a text file
describing a graph, and then respond to queries on standard input. For each query, you should
print to standard output the shortest path as a space-separated list of vertices.
The format of the text file is as follows:
• The first line will look like V N , where V is the number of vertices in the graph, and
N is the period of the edge weights.
• Following that, there will be one line per edge, in the format
vs vt w1 . . . wN
where vs is an integer representing the source vertex of the edge, vt is an integer
representing the target vertex of the edge, and each of w1 through wN are integers
representing the list of weights for that edge.
Each query will be given by a space-separated pair of integers, representing the indices of the start
and end vertices, respectively.
© 2024, Jongwook Kim. All rights reserved.
Example
Consider the following graph.txt file:
This represents the graph:
A sample run of the program is shown below:
$ ./a8 graph.txt
where 0 3 is the query input on stdin and 0 1 2 3 is the shortest path. Explanation: the shortest
path from 0 to 3 is 0 → 1 → 2 → 3 with a total weight of 5 + 2 + 4 = 11, since the
other path 0 → 2 → 3 has a total weight of 3 + 15 = 18.
There will be multiple queries for each graph, but you may assume that all queries with the same
start vertex will be given consecutively.
Grading
Similar to the previous programming assignment, your submission must be both correct and
efficient (and not have any memory leaks/errors, as usual) to receive full points. The graphs will
range in size from 10 vertices to roughly 1k vertices, and each graph will have approximately 10
queries. For each test case, your program must produce an output within the time limit to receive
credit. You should put a comment at the start of each method describing its functionality.
Submission
Submit any source/header files with your implementation, as well as a Makefile that builds
a target called a8, to Gradescope. DO NOT include executables in your submission. DO NOT
put your files inside a folder. Note that to receive points, your submission must work on
eceprog.
4,15