2024年1月23日学习记录

今天学习了用bts广度优先搜索解决走迷宫问题,看了B站上麦克尔的视频对bfs有了一个深刻的影响了。但是里面的队列的用法,暂时属于我未学习的领域。于是我又在B站上自学了数据结构里的栈和队列的概念和用法。简而言之,队列就是相于排队买东西,先排队的先入列然后后面的接上来,在队尾入列的同时作为先进入的队头就出去了。然后这个过程循环往复。

#include<bits/stdc++.h>
using namespace std;
int a[100][100], v[100][100];
struct point
{
    int x;
    int y;
    int step;
};
queue<point> r;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            scanf("%d", &a[i][j]);

    scanf("%d%d%d%d", &startx, &starty, &p, &q);
    //bfs
    point start;
    start.x = startx;
    start.y = starty;
    start.step = 0;
    r.push(start);//将起点入队
    v[startx][starty] = 1;
    while (r.empty())
    {
        int x = r.front().x, y = r.front().y;
        if (x == p && y == q)
        {
            printf("%d", r.front().step);
            break;
        }
        for (int k = 0; k <= 3; k++)
        {
            int tx, ty;
            tx = x + dx[k];
            ty = x + dy[k];
            if (a[tx][ty] == 1 && v[tx][ty] == 0)
            {
                point temp;
                temp.x = tx;
                temp.step = r.front().step + 1;
                r.push(temp);
                v[tx][ty] = 1;
            }
        }
        r.pop();
    }
    if (flag == 0)
        printf("no answear");
}

这是用bfs解决迷宫问题的代码,我边学视频边写下了这个代码。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值