鱼C论坛

 找回密码
 立即注册
查看: 1260|回复: 4

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

[复制链接]
发表于 2019-11-29 20:39:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

  3. int main(void)
  4. {
  5.     int x0, y0, x, y;
  6.     int i, count, sum = 0;

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

  18.     return 0;
  19. }
复制代码

--------------------------------------------------------------------------------------------
输入初始位置 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
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-29 21:00:32 | 显示全部楼层
按4、1、3、2的顺序吃,最短吧?15
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-30 20:43:20 | 显示全部楼层
2,3,1,4也可以吧,每个星星之间的距离是固定的,即从一个星星到另一个星星的距离是不变的,变量只有两个,就是第一步找到最近的爱心与星星之间的最短距离和最后一步避开相隔最远的两个星星
就像图中星星2,3,4距爱心的距离都是最短的,但2,4之间的距离太大了,要避免他们相连,所以,答案就是2,3,1,4或4,1,3,2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-1 18:39:58 | 显示全部楼层    本楼为最佳答案   
看题目描述这道题不是让求最优路径,星星的个数和顺序都是自行输入进行设定的。按照输入星星的顺序,每次累加与上一个星星的距离即可。
两颗星星的距离是:行差+列差 (行差列差都取绝对值)。因为没看到原题,这是参考代码。
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main(void)
  4. {
  5.     int x0, y0, x, y;
  6.     int i, count, sum = 0;

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

  18.     return 0;
  19. }
复制代码

--------------------------------------------------------------------------------------------
输入初始位置 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
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢!原来没我想的那么复杂,终于明白了!当时一直懵懵的,题目确实不是求最短距离,是自己设定星星位置……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 03:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表