我的目标是返回可及范围内(直线距离)相同颜色岩石的最短路径。
这是我的代码:
struct path findShortestPath(Wall w, int reach, Colour colour) {
struct path p = {0, NULL};
int numRocks = WallNumRocks(w);
struct rock *rocks = malloc(numRocks * sizeof(struct rock));
WallGetAllRocks(w, rocks);
qsort(rocks, numRocks, sizeof(struct rock), compareRocks);
p.numRocks = 0;
p.rocks = malloc(numRocks * sizeof(struct rock));
for (int i = 0; i < numRocks; i++) {
if (rocks[i].row <= reach && rocks[i].colour == colour) {
p.rocks[p.numRocks] = rocks[i];
p.numRocks++;
}
}
free(rocks);
return p;
}
这是示例输入:
20 25
4 18 0
5 6 0
6 2 0
6 14 0
7 10 0
8 16 0
9 7 0
9 23 0
10 13 0
11 19 0
12 4 0
12 9 0
14 12 0
14 21 0
15 5 0
16 17 0
5 3 1
6 11 1
6 16 1
7 7 1
7 20 1
10 18 1
13 6 1
13 11 1
13 23 1
14 15 1
16 2 1
16 20 1
4 9 2
5 17 2
5 22 2
7 5 2
9 19 2
10 3 2
11 10 2
11 15 2
14 18 2
16 9 2
此数据文件和输入 1 5 0 的正确输出是
(5, 6, GREEN), (9, 7, GREEN), (12, 4, GREEN), (15, 5, GREEN)
或
(5, 6, GREEN), (9, 7, GREEN), (12, 9, GREEN), (15, 5, GREEN)
这些都是这堵墙里的石头。还有一些必须帮助但不知道如何使用它们的辅助函数。比如
int WallGetColouredRocksInRange(Wall w, int row, int col, int dist,
Colour colour, struct rock rocks[])
这只是将给定范围内的所有岩石存储在岩石数组中。
几天来我一直迷失在这个作业问题中。 到目前为止,我只能得到开始的岩石,但不知道从这里去哪里。我曾尝试使用图表,但我只是不知道如何实现它们。帮助会很好;(