Python

来源:互联网 发布:淘宝怎么抢购秒杀 编辑:程序博客网 时间:2024/06/03 18:19

算法描述:给定开始点坐标(x,y) 和终点坐标(p,q),在一个二维数组里面,其中1代表障碍物,0则没有。求开始到终点的最短距离。

代码如下:

MIN = 9999999a = [[0 for col in range(50)] for row in range(50)]#迷宫最大数组book = [[0 for col in range(50)] for row in range(50)]#标记数组def dfs(start_x,start_y,end_x,end_y,migong_array,step):    '''    :param start_x: 起始横坐标    :param start_y: 起始纵坐标    :param end_x: 终点横坐标    :param end_y: 终点纵坐标    :param migong_array: 迷宫的数组    :return:    '''    next_step = [[0,1],  #向右走            [1,0],  #向下走            [0,-1], #向左走            [-1,0]  #向上走            ]    if (start_x == end_x and start_y == end_y):        global MIN        if(step < MIN):            MIN = step        return    for i in range(len(next_step)):        next_x = start_x + next_step[i][0]        next_y = start_y + next_step[i][1]        if(next_x < 0 or next_y < 0 or next_x > len(migong_array) or next_y > len(migong_array[0])):            continue        if(a[next_x][next_y] == 0 and book[next_x][next_y] == 0):            book[next_x][next_y] = 1            dfs(next_x,next_y,end_x,end_y,migong_array,step+1)            book[next_x][next_y] = 0    returnif __name__ == '__main__':    start_x = 0    start_y = 0    end_x = 3    end_y = 2    migong_array = [[0,0,1,0],[0,0,0,0],[0,0,1,0],[0,1,0,0],[0,0,0,1]]   #初始化迷宫    for i in range(len(migong_array)):        for j in range(len(migong_array[0])):            a[i][j] = migong_array[i][j]  #将迷宫数组写入a中    book[start_x][start_y] = 1  #将第一步标记为1,证明走过了。避免重复走    dfs(start_x,start_y,end_x,end_y,migong_array,0)    print('The min length of path is : {}'.format(MIN)) #输出为7,即最短路径为 7