BFS(两点搜索) UVA 11624 Fire!

 

题目传送门

  1 /*
  2     BFS:首先对火搜索,求出火蔓延到某点的时间,再对J搜索,如果走到的地方火已经烧到了就不入队,直到走出边界。
  3 */
  4 /************************************************
  5 Author        :Running_Time
  6 Created Time  :2015-8-4 8:11:54
  7 File Name     :UVA_11624.cpp
  8 *************************************************/
  9 
 10 #include <cstdio>
 11 #include <algorithm>
 12 #include <iostream>
 13 #include <sstream>
 14 #include <cstring>
 15 #include <cmath>
 16 #include <string>
 17 #include <vector>
 18 #include <queue>
 19 #include <deque>
 20 #include <stack>
 21 #include <list>
 22 #include <map>
 23 #include <set>
 24 #include <bitset>
 25 #include <cstdlib>
 26 #include <ctime>
 27 using namespace std;
 28 
 29 #define lson l, mid, rt << 1
 30 #define rson mid + 1, r, rt << 1 | 1
 31 typedef long long ll;
 32 const int MAXN = 1e3 + 10;
 33 const int INF = 0x3f3f3f3f;
 34 const int MOD = 1e9 + 7;
 35 char maze[MAXN][MAXN];
 36 bool vis[MAXN][MAXN];
 37 int step[MAXN][MAXN];
 38 int dx[4] = {-1, 1, 0, 0};
 39 int dy[4] = {0, 0, -1, 1};
 40 int n, m;
 41 
 42 bool judge_f(int x, int y)  {
 43     if (x < 1 || x > n || y < 1 || y > m || vis[x][y] || maze[x][y] == '#')    return false;
 44     return true;
 45 }
 46 
 47 bool judge_j(int x, int y)  {
 48     if (x < 1 || x > n || y < 1 || y > m)   return true;
 49     return false;
 50 }
 51 
 52 void BFS_F(void)  {
 53     memset (step, INF, sizeof (step));
 54     memset (vis, false, sizeof (vis));
 55     queue<pair<int, int> > Q;
 56     for (int i=1; i<=n; ++i)    {
 57         for (int j=1; j<=m; ++j)    {
 58             if (maze[i][j] == 'F') {
 59                 Q.push (make_pair (i, j));  vis[i][j] = true;
 60                 step[i][j] = 0;
 61             }
 62         }
 63     }
 64     while (!Q.empty ()) {
 65         int x = Q.front ().first, y = Q.front ().second;    Q.pop ();
 66         for (int i=0; i<4; ++i) {
 67             int tx = x + dx[i], ty = y + dy[i];
 68             if (!judge_f (tx, ty))    continue;
 69             step[tx][ty] = step[x][y] + 1;
 70             Q.push (make_pair (tx, ty));    vis[tx][ty] = true;
 71         }
 72     }
 73 }
 74 
 75 void BFS_J(void)    {
 76     memset (vis, false, sizeof (vis));
 77     queue<pair<int, int> > Q;
 78     for (int i=1; i<=n; ++i)    {
 79         for (int j=1; j<=m; ++j)    {
 80             if (maze[i][j] == 'J')  {
 81                 Q.push (make_pair (i, j)); step[i][j] = 0; vis[i][j] = true;   break;
 82             }
 83         }
 84     }
 85     while (!Q.empty ()) {
 86         int x = Q.front ().first, y = Q.front ().second;    Q.pop ();
 87         for (int i=0; i<4; ++i) {
 88             int tx = x + dx[i], ty = y + dy[i];
 89             if (judge_j (tx, ty))    {
 90                 printf ("%d\n", step[x][y] + 1);    return ;
 91             }
 92             if (step[x][y] + 1 >= step[tx][ty] || vis[tx][ty] || maze[tx][ty] == '#') continue;
 93             Q.push (make_pair (tx, ty));    step[tx][ty] = step[x][y] + 1;  vis[tx][ty] = true;
 94         }
 95     }
 96     puts ("IMPOSSIBLE");
 97 }
 98 
 99 int main(void)    {     //UVA 11624 Fire!
100     int T;  scanf ("%d", &T);
101     while (T--) {
102         scanf ("%d%d", &n, &m);
103         for (int i=1; i<=n; ++i)    {
104             scanf ("%s", maze[i] + 1);
105         }
106         BFS_F ();   BFS_J ();
107     }
108 
109     return 0;
110 }

 

转载于:https://www.cnblogs.com/Running-Time/p/4703122.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值