BFS搜索 TLE 已判断地图是否走过 想知道还有别的优化方法嘛!
查看原帖
BFS搜索 TLE 已判断地图是否走过 想知道还有别的优化方法嘛!
905233
Rebirth_Yun楼主2023/7/13 19:14

代码部分如下

#include<bits/stdc++.h>
using namespace std;
char mp[100][100];

struct point //存放坐标
{
    int x,y;
};

int x,y;

bool check(point z,int a,int b) //判断坐标合法
{
    int xx = z.x+a;
    int yy = z.y+b;
    return (xx>=0 && xx<=x && yy>=0 && yy<=y && mp[xx][yy] != '#' );
}

int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};//方向为四向

int main()
{
    cin >> x >> y;

    for(register int i=0;i<x;i++)
        for(register int j=0;j<y;j++)
            cin >> mp[i][j];

    x--,y--;//我是从0开始计算 所以坐标-1才能达到这个点
    
    queue<point>Q;
    Q.push({0,0});//起点0,0
    while (!Q.empty())
    {
        
        point u = Q.front();
        if(u.x==x&&u.y==y)
        {
            cout << "Yes";
            return 0;
        }
        Q.pop();
        mp[u.x][u.y]='#';//当前位置标记障碍 这样下次不会再来
        for(int i=0; i<4; i++)
        {
            if(check(u,dir[i][0],dir[i][1]))//判断合法
            {
                point v = u;
                v.x+=dir[i][0];
                v.y+=dir[i][1];
                Q.push(v);
            }
        }
    }
    cout << "No"; //没有找到输出
    return 0;
}

因为BFS这快学的不好 希望有大佬能提示一下!

2023/7/13 19:14
加载中...