如何找到这个数组中的最短路径!? :(

问题描述 投票:0回答:0

我的目标是返回可及范围内(直线距离)相同颜色岩石的最短路径。

这是我的代码:

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[]) 

这只是将给定范围内的所有岩石存储在岩石数组中。

几天来我一直迷失在这个作业问题中。 到目前为止,我只能得到开始的岩石,但不知道从这里去哪里。我曾尝试使用图表,但我只是不知道如何实现它们。帮助会很好;(

arrays c algorithm adt shortest-path
© www.soinside.com 2019 - 2024. All rights reserved.