220S2C留学生讲解、辅导java/python程序、讲解c++/python、辅导Graph Algorithms

- 首页 >> Java编程

Computer Science 220S2C (2018)

Assignment 3 (Graph Algorithms)

Due date October 20, 2018, 11pm

Automarker Submission

This assignment tests your understanding of graph optimization problems. To get marks for this assignment you

need to submit three programs for the following tasks to http://www.cs.auckland.ac.nz/automated-marker

twice. Note this marker runs on a linux box so no Microsoft specific code should be used; read the help/FAQ

for more details. Each program will have an easy test case (2 marks) and harder test case (1 mark). Please use

the suffix E of your program basename to denote ‘E’asy (test data) and H to denote ‘H’ arder (test data).

For Task 1, name your source code mstE.ext and mstH.ext, where ext denotes one of {java, cpp, py, cs}

to indicate a java/c++/python/c#(mono) program. For Task 2, name your source code named maxpathE.ext

and maxpathH.ext, respectively. For Task 3, please submit source code named snakeE.ext and snakeH.ext,

respectively.

An excessive number of submissions (over 10) for a particular problem will accrue a 20% penalty per that

problem if you eventually solve it.

Task 1: Minimum Spanning Trees

For this warm-up task you are to implement any efficient minimum spanning tree algorithm that takes a sequence

of edge-weighted graphs and outputs the minimum cost weight of a spanning tree of each.

Input Format

For this assignment we use adjacency matrices with positive integer weights. Here a zero entry at row i and

column j indicates that no edge ij exists in the graph. The first line consists of an integer n ≤ 1000 denoting the

order of the graph. This is then followed by n lines of n white-space separated integers denoting edge weights.

The sequence of graphs is terminated by a value n = 0, which is not processed.

3

0 1 3

1 0 2

3 2 0

4

0 2 7 0

2 0 5 1

7 5 0 3

0 1 3 0

6

0 1 0 4 0 0

1 0 3 0 3 0

0 3 0 0 0 2

4 0 0 0 2 0

0 3 0 2 0 1

0 0 2 0 1 0

0

Output Format

Output should be one line for each input graph indicating the minimum cost weighted tree. The sample output

for the previous input cases is as follows.

9

Task 2: A Paths Optimization Problem for Weighted Trees

A developer has designed a subdivision within a city such that all roads connect at intersections in a treelike

design. This is to prevent all petrol-head hooligans from disturbing the residences by not having any road loops

for races. Only the entering intersection is connected to the rest of the city. The developer is selling off land

alongside roads between adjacent intersections. A real estate agent has produced a green book indicating the

expected dollar profit (positive, zero or negative) that can be obtained by purchasing the land alongside each

road.

Potential buyers want to maximize their profit, but prefer to buy a contiguous stretch of land alongside

a simple road chain that connects two intersections of the subdivision. Your task is to write a program to

determine the maximum non-negative profit that can be obtained this way.

As an example, consider the following representation of a subdivision, where road labels represent expected

profits. In this scenario, the maximum non-negative profit is 5, and can be obtained alongside the emphasized

roads:

Input Format

Input for this problem consists of a sequence of one or more scenarios, taken from the keyboard/stdin. Each

scenario contains two or more lines.

The first line contains an integer n, 1 ≤ n ≤ 500000, indicating the number of intersections, including the

entrance intersection, implicitly labelled 0.

This is then followed by one or more lines, containing n ? 1 pairs of integers. All integers are separated

by single spaces or newlines. The y-th intersection is defined by the y-th pair of integers ‘x p’, where

1 ≤ y < n, 0 ≤ x < y, ?1000 ≤ p ≤ 1000. This pair indicates that a road is added between y and a

previously defined intersection, x, with a green book profit value given by p.

The input will be terminated by a line consisting of one zero (0). This line should not be processed. Some

sample input scenarios follows.

5

0 -1 1 3 0 2 1 2

5

0 1 1 -3 0 -2 1 -2

5

0 -1 1 -3 0 -2 1 -2

10

0 -1 0 -1 0 0 1 3 1 4 2 4 2 2 3

3 3 3

0

Output Format

Output will be a sequence of lines, one for each input scenario. Each line will contain an integer, indicating

the maximum non-negative profit sum, over all possible simple road chains connecting two intersections of the

subdivision. Write zero (0) if no profit can be obtained. The output for the previous sample input follows.

7

Task 3: Snakes in a Graph

For a graph G = (V, E), a snake (also called an induced path) is a path v1, v2, . . . , vk such that for all j ? i > 1

(vi

, vj ) 6∈ E. That is, it is a sequence of vertices in G such that each two adjacent vertices in the sequence are

connected by an edge in G, and each two nonadjacent vertices in the sequence are not connected by any edge

in G.

For this task, our goal is to determine the largest snake of a graph.

Input Format

Input for this problem consist of a sequence of one or more (undirected) graphs taken from the keyboard. Each

graph is represented by an adjacency list. The first line is an integer n indicating the order of the graph. This

is followed by n white space separated lists of adjacencies for nodes labeled 0 to n ? 1. The input will be

terminated by a line consisting of one zero (0). This line should not be processed. Two sample input graphs

are listed below. The easy (harder) test cases are graphs of order at most 10 (50).

Output Format

Output will be just one integer per line sent to the console (e.g. System.out). For the above, input we would

output the following two integers denoting the longest snake of the two graphs. Recall that the length of a path

is the number of edges.


站长地图