阿康康康 发表于 2019-11-29 20:39:06

求助大佬们一道可能属于二维数组的题目,完全没有思路……::>_<::

今天考试时做的题目,到现在还是不会……(。﹏。)
大概是求从初始位置开始(橙色爱心处),
按顺序吃掉所有星星所需要走的最短距离(走到最后一个星星即停止),
初始位置需要自行设定,
星星的个数和顺序也需要自行输入进行设定。


如图所示作为例子的话,
(0,5)表示第一颗、(4,2)表示第二颗,(1,1)表示第三颗,(2,6)表示第四颗,
起始位置是(2,3),所以最短距离为21。

求助一个大概的思路,感谢!!!

lby2010 发表于 2019-11-29 21:00:32

按4、1、3、2的顺序吃,最短吧?15

北走、 发表于 2019-11-30 20:43:20

2,3,1,4也可以吧,每个星星之间的距离是固定的,即从一个星星到另一个星星的距离是不变的,变量只有两个,就是第一步找到最近的爱心与星星之间的最短距离和最后一步避开相隔最远的两个星星
就像图中星星2,3,4距爱心的距离都是最短的,但2,4之间的距离太大了,要避免他们相连,所以,答案就是2,3,1,4或4,1,3,2

superbe 发表于 2019-12-1 18:39:58

看题目描述这道题不是让求最优路径,星星的个数和顺序都是自行输入进行设定的。按照输入星星的顺序,每次累加与上一个星星的距离即可。
两颗星星的距离是:行差+列差 (行差列差都取绝对值)。因为没看到原题,这是参考代码。
#include <stdio.h>
#include <math.h>

int main(void)
{
    int x0, y0, x, y;
    int i, count, sum = 0;

    printf("输入初始位置 x,y : ");
    scanf("%d,%d", &x0, &y0);
    printf("输入星星的个数: ");
    scanf("%d", &count);
    for (i = 1; i <= count; i++) {
      printf("输入第 %d 个星星的位置 x,y : ", i);//半角逗号分隔
      scanf("%d,%d", &x, &y);
      sum += abs(x - x0) + abs(y - y0);
      x0 = x, y0 = y;
    }
    printf("最短距离: %d\n", sum);

    return 0;
}
--------------------------------------------------------------------------------------------
输入初始位置 x,y : 2,3
输入星星的个数: 4
输入第 1 个星星的位置 x,y : 0,5
输入第 2 个星星的位置 x,y : 4,2
输入第 3 个星星的位置 x,y : 1,1
输入第 4 个星星的位置 x,y : 2,6
最短距离: 21
请按任意键继续. . .

阿康康康 发表于 2019-12-13 19:47:06

superbe 发表于 2019-12-1 18:39
看题目描述这道题不是让求最优路径,星星的个数和顺序都是自行输入进行设定的。按照输入星星的顺序,每次累 ...

{:10_298:}{:10_250:}感谢!原来没我想的那么复杂,终于明白了!当时一直懵懵的,题目确实不是求最短距离,是自己设定星星位置……
页: [1]
查看完整版本: 求助大佬们一道可能属于二维数组的题目,完全没有思路……::>_<::