#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
#define N 1100
struct nodde {
int x,y;
}f[N],start;
int h,n,m,visitt[N][N];
int dis[4][2]={-1,0,1,0,0,1,0,-1};
char str[N][N];
struct node {
int x,y,time,f;
};
int judge(int x,int y) {
if(x>=1&&x<=n&&y>=1&&y<=m&&str[x][y]!='#'&&!visitt[x][y])
    return 1;
return 0;
}
void bfs() {
int i;
queue<node>q;
node cur,next;
memset(visitt,0,sizeof(visitt));
for(i=0;i<h;i++) {
    cur.x=f[i].x;
    cur.y=f[i].y;
    cur.time=0;
    cur.f=1;
    q.push(cur);
    visitt[cur.x][cur.y]=1;
}
cur.x=start.x;
cur.y=start.y;
cur.time=0;
cur.f=0;
q.push(cur);
while(!q.empty()) {
    cur=q.front();
      if((cur.x==1||cur.x==n||cur.y==1||cur.y==m)&&cur.f==0) {//有可能起点就在边界上
            printf("%d\n",cur.time+1);
            return ;
        }
    q.pop();
    for(i=0;i<4;i++) {
        int xx=next.x=cur.x+dis[i][0];
        int yy=next.y=cur.y+dis[i][1];
        next.time=cur.time+1;
        next.f=cur.f;
        if(judge(xx,yy)) {
        visitt[xx][yy]=1;
            q.push(next);
        }
    }
}
printf("IMPOSSIBLE\n");
return ;
}
int main() {
    int i,j,t;
    scanf("%d",&t);
    while(t--) {
     scanf("%d%d",&n,&m);
     for(i=1;i<=n;i++)
        scanf("%s",str[i]+1);
        h=0;
     for(i=1;i<=n;i++)
     for(j=1;j<=m;j++) {
        if(str[i][j]=='J')
            start.x=i,start.y=j;
        if(str[i][j]=='F') {
            f[h].x=i;
            f[h++].y=j;
        }
     }
    bfs();
    }
return 0;
}

最新文章

  1. ASP.NET MVC中viewData、viewBag和templateData的使用与区别
  2. win server服务安装
  3. ecto注册码
  4. redhat 6.4 双网卡绑定
  5. stack around the variable “XX” was corrupted
  6. Android Broadcast管理
  7. javascript封装函数入门
  8. c++ std::advance
  9. 不容易系列之一(hdu1465)错排+递推
  10. LeetCode算法题-Add Binary(Java实现)
  11. 关于JDBC的总结
  12. scala-创建泛型数组(T: Manifest)
  13. python中的多进程与多线程(一)
  14. 关于js原型链
  15. django的优缺点(非原创)
  16. 初次见识结构体与map的区别
  17. (转)Python中的generator详解
  18. Ofstream的endl不好用怎么回事?
  19. asp.net MVC设计模式中使用iTextSharp实现html字符串生成PDF文件
  20. 【转】 Tomcat+redis+nginx配置

热门文章

  1. Android WiFi开发教程(二)——WiFi的搜索和连接
  2. ssdb底层实现——ssdb底层是leveldb,leveldb根本上是skiplist(例如为存储多个list items,必然有多个item key,而非暴力string cat),用它来做redis的list和set等,势必在数据结构和算法层面上有诸多不适
  3. Codeforces--630C--Lucky Numbers(快速幂)
  4. poj--1753--Flip Game(dfs好题)
  5. 【撸码caffe四】 solver.cpp&&sgd_solver.cpp
  6. B1045 糖果传递 数学
  7. VS2010中文注释带红色下划线的解决方法
  8. 2205 等差数列(dp)
  9. kafka与zookeeper实战笔记
  10. weui&amp;flexible布局