鱼C论坛

 找回密码
 立即注册
楼主: wei_Y

[技术交流] #鱼C五周年嘉年华#算法——送(qiang)快(jiang)递(pin)。--已经结束

[复制链接]
头像被屏蔽
发表于 2015-1-24 13:30:21 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 13:54:13 | 显示全部楼层
支持小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-1-24 13:56:52 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 15:55:37 | 显示全部楼层

回帖奖励 +1 鱼币

我来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 16:21:46 | 显示全部楼层
我来看看{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 17:40:21 | 显示全部楼层

回帖奖励 +1 鱼币

有点难啊,,,,坐等大神上代码去领悟。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 20:07:12 From FishC Mobile | 显示全部楼层

回帖奖励 +1 鱼币

看不懂→_→我们需要写什么内容?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-24 20:35:36 | 显示全部楼层
小甲鱼的二师兄 发表于 2015-1-24 20:07
看不懂→_→我们需要写什么内容?

我写上了吧,可以跑出最短时间路径的函数。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-24 21:11:45 | 显示全部楼层
艾玛,终于看懂题目神马意思啦!感觉好难哦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 10:01:01 | 显示全部楼层

回帖奖励 +1 鱼币

不会也要支持下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 10:13:32 | 显示全部楼层

回帖奖励 +1 鱼币

看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-25 11:14:00 | 显示全部楼层

回帖奖励 +1 鱼币

领奖品~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 11:36:07 | 显示全部楼层
遇到加速可以选择不进,但是如果行进路线上有3个加速状态或者以上,再加速状态下路过B,是否可以选择退出或不退出加速状态
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-25 11:42:26 | 显示全部楼层
挥舞乾坤 发表于 2015-1-25 11:36
遇到加速可以选择不进,但是如果行进路线上有3个加速状态或者以上,再加速状态下路过B,是否可以选择退出或不 ...

可以。在B点是选择进出,可以进也可以不进。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 14:14:33 | 显示全部楼层
基本功能已经写好了,有些乱,整理一下,再发

评分

参与人数 1鱼币 +6 收起 理由
wei_Y + 6 期待~。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 15:13:06 | 显示全部楼层

回帖奖励 +1 鱼币

本来可以写完了, 考虑到地图可以是66的, 暂时无法应对太多障碍…… 今天应该能写好

评分

参与人数 1鱼币 +6 收起 理由
wei_Y + 6 加油~。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 15:26:55 | 显示全部楼层

回帖奖励 +1 鱼币

我怎么有点晕,题目没怎么看懂啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 16:04:02 | 显示全部楼层
本帖最后由 挥舞乾坤 于 2015-1-25 16:46 编辑

先发出来测试一下,抛砖引玉了,代码效率太低了,5*6要10几秒,6*6,几分钟,先测试一下功能吧,一会出去喝大酒,回来再改
1*6的问题改过了,但效率还是硬伤啊
  1. def maze():
  2.     '之后加上判断输入是否合法的代码'

  3.     str_map = input('输入一个字符串格式的迷宫地图(SBW.,....,....,..BE):')

  4.     #处理字符串,返回二维列表形式的地图及元组形式的地图范围
  5.     limit,data = str_to_list(str_map)
  6.    
  7.     #遍历所有可达路径,返回列表
  8.     list_path = get_path(data,limit)

  9.     #路径加速减速方面的处理
  10.     list_path = chuli(list_path)

  11.     #计算耗时
  12.     min_time,min_path = calc(list_path)

  13.     print('地图大小:%d * %d' % limit)
  14.     print('#',min_path, sep = '')
  15.     print('最低耗时:%d' % min_time)
  16.    
  17. def str_to_list(str_map):
  18.     '处理字符串,返回一个二维列表形式的地图列表'
  19.     str_map = str_map.upper()
  20.     list_map = [ list(x) for x in str_map.split(',')]
  21.     map_limit = (len(list_map),len(list_map[0]))
  22.     return map_limit,list_map

  23. def get_path(data,limit):
  24.     '便利所有可达路径'
  25.     result = []
  26.     fx = [[0, 1, 'R'], [1, 0, 'D'], [0, -1, 'L'], [-1, 0, 'U']]
  27.     x_limit,y_limit = limit
  28.    
  29.     def move(path, maps, path_stack = [(0,0)]):
  30.         '这里有点问题,由于用的是递归,代码效率太低了,6*6太久,5*6勉强可以,囧'
  31.         x, y = path_stack[-1]
  32.         if (x, y) == (x_limit - 1,y_limit - 1):
  33.             result.append(path)
  34.             path_stack.pop()
  35.             return
  36.         
  37.         for i in fx:
  38.             x, y = path_stack[-1]            
  39.             x, y = x + i[0], y + i[1]
  40.             if x not in range(x_limit) or y not in range(y_limit) \
  41.                or (x,y) in path_stack or maps[x][y] == 'W':
  42.                 x = max(min(x, x_limit - 1), 0)
  43.                 y = max(min(y, y_limit - 1), 0)
  44.                 continue                        
  45.             path_stack.append((x,y))
  46.             if maps[x][y] == 'B':
  47.                 move(path + i[2] + 'B', maps)
  48.             else:
  49.                 move(path + i[2], maps)            
  50.         path_stack.pop()
  51.     move('',data)
  52.    
  53.     return result

  54. def chuli(list_path):
  55.     new_list = []
  56.     for each in list_path:
  57.         if each.count('B') == 1:
  58.             each = each.replace('B','')
  59.         if each.count('B') == 2:
  60.             if each.rindex('B') - each.index('B') < 3:
  61.                 each = each.replace('B','')
  62.         elif each.count('B') > 2:
  63.             first = each.index('B')
  64.             end = each.rindex('B') - len(each) + 1
  65.             each = each.replace('B','')
  66.             each = each[:first] + 'B' + each[first:]
  67.             each = each[:end] + 'B' + each[end:]
  68.             
  69.         new_list.append(each)
  70.     return new_list
  71.          
  72. def calc(list_path):
  73.     min_sep = 100
  74.     min_path = ''
  75.     for each in list_path:
  76.         count = 0
  77.         spend = -1
  78.         for s in each:
  79.             if s == 'B':
  80.                 count += 1
  81.                 spend = -spend
  82.             elif spend == 1:
  83.                 count += 1
  84.             else:
  85.                 count += 2
  86.         if count < min_sep:
  87.             min_sep = count
  88.             min_path = each
  89.     return min_sep,min_path

  90.             
  91. if __name__ == '__main__':
  92.     maze()
复制代码




点评

我很赞同!: 3.0
我很赞同!: 3
6*6的没测出结果。不过1*6的S.BB.E,返回结果RRBRBRR,应该是RRRRR。  发表于 2015-1-25 16:19

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
戴宇轩 + 1 + 1 谢谢, 你写的脚本逻辑很好

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 17:23:56 | 显示全部楼层
戴宇轩 发表于 2015-1-25 16:51
这是个半成品, 暂时没有考虑加速器B的情况, 而且路径暂时不完整, 还是先发上来看看吧, 下次改

!!!!!我没有设计回路, 看来要换一个思路了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-25 17:36:10 | 显示全部楼层
挥舞乾坤 发表于 2015-1-25 16:04
先发出来测试一下,抛砖引玉了,代码效率太低了,5*6要10几秒,6*6,几分钟,先测试一下功能吧,一会出去喝大酒,回 ...

SBW...,.WWB..,..WW..,......,...WW.,..BWBE

地图大小:6 * 6
#DDRDRRRRDD
最低耗时:20

测试了一下这个,不知道结果对不对,障碍多,速度还是挺快的,是不是因为障碍多,路径少了,就快了啊,没障碍,还是很慢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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