鱼C论坛

 找回密码
 立即注册
查看: 874|回复: 6

一个回溯算法

[复制链接]
发表于 2021-9-2 16:20:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 一只魈咸鱼 于 2021-9-2 18:26 编辑

请问下面程序错在哪了呢,为什么bad函数里面明明pos[y]>max_y了它却不比较呢?
里面那个注释写错了,我程序输入的是:
0 0
0 1
终点坐标是1,1
222.jpg
源代码“:
#用户输入m行n列字符串,不存在处为-1,存在处为0(非终点)或1(终点)
#创建递归函数
route_dict = {}
move_lst = [(0,1),(0,-1),(1,0),(-1,0)]
def bad(pos):
    print(pos[1],max_y)
    if pos[0]<0 or pos[0]>max_x:
        return True
    if pos[1]<0 or pos[0]>max_y:
        print('hi')
        return True
    if f'{pos[0]},{pos[1]}' in route_dict:
        return True
def traceback_fn(start):
    global route_dict
    for move in move_lst:
        if bad(start):
            continue
        next_start = start[0]+move[0],start[1]+move[1]
        print(next_start)
        if rows[next_start[0]][next_start[0]] == '1':
            return True
        if traceback_fn(next_start):
            route_dict[f'{start[0]},{start[1]}']='6'
            return True
    return False

rows = []
pos_dict = {}
max_y = -1

while True:
    j = input()
    if j:
        row = j.split()
        rows.append(row)
        max_y+=1
    else:
        break
max_x = len(rows[0])-1
'''
#pos_dict记录各坐标的状态
for y in range(max_y):
    for x in range(max_x):
        pos_dict[f'{x},{y}'] = rows[y][x]
'''
traceback_fn((0,0))
print(route_dict)
还有一个小问题,dict.items返回的是什么类型呢?网上查是列表,但是用type显示的是dict_items
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-2 16:26:11 | 显示全部楼层
哎。。。
截图也行,发代码也行,你这样根本没人有心情仔细看你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 16:54:53 | 显示全部楼层
有点模糊啦,好兄弟搞个截图软件呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 17:28:43 From FishC Mobile | 显示全部楼层
左上角有贴代码的,我们想修改一下还得抄一遍吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-2 18:26:50 | 显示全部楼层
加上了,抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-3 19:35:31 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-3 19:37 编辑

兄弟,你直接給我題目,和想要的結果吧,我幫你重新寫過全部代碼吧。
至於你問說dict.items返回什麼?
就是字典裡面的東西,如果你想列表化,前面加個list()函數,如下:
  1. x = {'banana': 13, 'apple': 5, 'stawberry': 7}

  2. y = x.items()
  3. z = list(x.items())

  4. print('y:', y)
  5. print('z:', z)
复制代码

輸出結果:
  1. y: dict_items([('banana', 13), ('apple', 5), ('stawberry', 7)]) # <class 'dict_items'>
  2. z: [('banana', 13), ('apple', 5), ('stawberry', 7)] # <class 'list'>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-4 14:48:44 | 显示全部楼层
傻眼貓咪 发表于 2021-9-3 19:35
兄弟,你直接給我題目,和想要的結果吧,我幫你重新寫過全部代碼吧。
至於你問說dict.items返回什麼?
就 ...


好的好的,麻烦你了!
问题如下:
一平面上是MxN个格子,其中一个格子是终点,比如4x4的格子:
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 0
此处1是终点,一蚂蚁可选择除终点格子的任意一个作为起点,当蚂蚁到达终点且所有格子都留下了蚂蚁的痕迹游戏结束,此过程蚂蚁不能出界,不能踩已经踩过的格子。
要求出一个胜利方案,即:起点与路线
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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