AcWing 844. 走迷宫(BFS)

AcWing 844. 走迷宫(BFS)_第1张图片

 AcWing 844. 走迷宫(BFS)_第2张图片

C++

#include
#include
#include

using namespace std;

typedef pair PII;

const int N=110;

int n,m;
int g[N][N]; //g数组存地图
int d[N][N]; //d数组存每一个点到起点的距离
PII q[N*N];  //定义一个队列,记录走过的路径

int bfs()
{
    int hh=0,tt=0;   //初始化队列,对头队尾都是0
    q[0]={0,0};
    
    memset(d,-1,sizeof d);  //把所有距离初始为-1
    d[0][0]=0;   //距离是0表示已经走过了
    
    int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};   //用向量的形式表示往四个方向扩展
    
    while(hh<=tt){  //队列不空
        auto t = q[hh++];  //auto自动类型判断,用于对象声明  //每次取出队头元素
        
        for(int i=0;i<4;i++)  //四个方向
        {
            int x=t.first+dx[i],y=t.second+dy[i];   //x表示沿着这个方向走,可以走到哪个点
            if(x>=0 && x=0 && y>n>>m;
    
    for (int i=0;i> g[i][j];
        
    cout << bfs() <

Python

def bfs():
    q=[[0,0] for _ in range(m*n)]    #q记录走过的路径
    hh=tt=0
    dx=[-1,0,1,0]    #向量表示往四个方向走
    dy=[0,1,0,-1]
    while hh<=tt:    #队列不为空
        t=q[hh]      #取出队头元素
        hh+=1
        for i in range(4):    #从当前点出发往四个方向走
            x=t[0]+dx[i]      #即将走的点的坐标
            y=t[1]+dy[i]
            if (x=0 and y=0 and d[x][y]==0 and ditu[x][y]==0):
                #即将走的点 在范围内 and 没走过 and 在地图上可以走
                d[x][y]=d[t[0]][t[1]]+1   #记录该点的距离
                tt+=1
                q[tt]=[x,y]     #存入走过的路径列表
    return d[n-1][m-1]   
if __name__=='__main__':
    n,m=map(int,input().split())
    ditu=[list(map(int,input().split())) for _ in range(n)]   #存地图
    d=[[0]*m for _ in range(n)]   #存每一个点到起始点的距离
    print(bfs())

 

你可能感兴趣的:(python)