zoukankan      html  css  js  c++  java
  • bfs(队列模板)

     

    【题目描述】

    当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。

    假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。

    【输入】

    第一行是两个整数n和m(1≤n,m≤100),表示迷宫的行数和列数。

    接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符‘.’表示空地,‘#’表示墙,‘S’表示起点,‘T’表示出口。

    【输出】

    输出从起点到出口最少需要走的步数。

    【输入样例】

    3 3
    S#T
    .#.
    ...
    

    【输出样例】

    6
    #include <cstdio>
    #include <cstring>
    #include<cmath>
    #include<algorithm> 
    #include<iostream>
    #include<queue>
    #define P  pair<int,int> 
    using namespace std;
    char a[105][105];
    int dx[5]={-1,1,0,0};
    int dy[5]={0,0,1,-1};
    int d[105][105],n,m;
    int  bfs(int x,int y)
    {
        int ex,ey;
        //memset(d,0,sizeof(d));
        queue <P> que;
        que.push(P(x,y));
        while(que.size()>0)
        {
         ex=que.front().first;
         ey=que.front().second;
        que.pop();
        if(a[ex][ey]=='T')
        { 
        return d[ex][ey];
        break;
    }
        for(int i=0;i<4;i++)
        {
            int nx=ex+dx[i];
            int ny=ey+dy[i];
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&(a[nx][ny]=='.'||a[nx][ny]=='T')&&d[nx][ny]==0)
            {
                que.push(P(nx,ny));
                d[nx][ny]=d[ex][ey]+1;
            }
        }
        }
        return d[ex][ey];
    }
    
    int main() {
      int x;
      cin>>n>>m;
      for(int i=1;i<=n;i++)
      {
          for(int j=1;j<=m;j++)
          cin>>a[i][j]; 
      }
      for(int i=1;i<=n;i++)
      {
          for(int j=1;j<=m;j++)
          if(a[i][j]=='S')
           x=bfs(i,j);
      }
     
      cout<<x<<endl; 
        return 0;
    }
  • 相关阅读:
    URL vs. HTML 录制模式
    多机联合产生负载
    浏览器打开URL的方式和加载过程
    与前端性能相关的头信息
    HTTP协议结构
    前端优化
    前端性能测试工具
    Apache 服务器
    java回调机制
    不允许用大于号小于号,比较任意两个数字大小
  • 原文地址:https://www.cnblogs.com/hh13579/p/10877276.html
Copyright © 2011-2022 走看看