解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>

using namespace std;


const int MAX=105;


int row,col;//定义行,列

char mp[MAX][MAX];

bool vis[MAX][MAX];//标记是否走过


int dx[4]={-1,1,0,0};

int dy[4]={0,0,-1,1};


struct Node

{

    int x,y;

    int step;

};


//检查点能否走

bool check(int x,int y)

{

    if(x<0||x>=row||y<0||y>=col) return false;

    if(mp[x][y]=='#') return false;

    if(vis[x][y]==true) return false;

    

    return true;

}


//bfs

int bfs(int startX,int startY,int endX,int endY)

{

    queue<Node> q;

    

    Node start;

    start.x=startX;

    start.y=startY;

    start.step=0;

    

    q.push(start);

    vis[start.x][start.y]=true;

    

    while(!q.empty())

    {

        Node now=q.front();

        q.pop();

        

        if(now.x==endX&&now.y==endY) return now.step;

        

        for(int i=0;i<4;i++)

        {

            int nx=now.x+dx[i];

            int ny=now.y+dy[i];

            

            if(check(nx,ny)==true)

            {

                Node next;

                next.x=nx;

                next.y=ny;

                next.step=now.step+1;

                

                q.push(next);

                vis[nx][ny]=true;

            }

        }

    }

    return -1;

}


int main()

{

    int T;

    cin>>T;

    while(T--)

    {

        memset(vis,0,sizeof(vis));

        

        cin>>row>>col;

        

        int sx,sy,ex,ey;

        

        for(int i=0;i<row;i++)

        {

            for(int j=0;j<col;j++)

            {

                cin>>mp[i][j];

                

                if(mp[i][j]=='S')

                {

                    sx=i;

                    sy=j;

                }

                if(mp[i][j]=='E')

                {

                    ex=i;

                    ey=j;

                }

            }

        }

        int ans=bfs(sx,sy,ex,ey);

        cout<<ans<<endl;

    }

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论