zoukankan      html  css  js  c++  java
  • uva 11624 Fire!(搜索)

    开始刷题啦= = 痛并快乐着,学到新东西的感觉其实比看那些无脑的小说、电视剧有意思多了

    bfs裸体,关键是先把所有的着火点放入队列,分开一个一个做bfs会超时的

    发现vis[][]是多余的,完全可以用num[][]代替了,不过不提交了。。。

    uva的submission error跳得我蛋疼,可是介于管理员Carlos及时回复了,还是理解人家吧

      1 #include<cstdio>
      2 #include<cstring>
      3 
      4 const int MAXN=1111;
      5 
      6 struct P{
      7     int x,y;
      8     int c;
      9 };
     10 
     11 P que[MAXN*MAXN];
     12 char mp[MAXN][MAXN];
     13 int num[MAXN][MAXN],vis[MAXN][MAXN];
     14 
     15 int dir[4][2]={1,0,-1,0,0,1,0,-1};
     16 int n,m,flog;
     17 int xi[MAXN],yi[MAXN];
     18 
     19 void bfs(int l,int r)
     20 {
     21     while(l<r)
     22     {
     23         int x=que[l].x;
     24         int y=que[l].y;
     25         int c=que[l++].c;
     26         num[x][y]=c;
     27         for(int i=0;i<4;i++)
     28         {
     29             int dx=x+dir[i][0];
     30             int dy=y+dir[i][1];
     31 
     32             if(dx<0||dy<0||dx>=n||dy>=m){
     33                 if(!flog){
     34                     flog=1;
     35                     que[0].c=c;
     36                 }
     37                 continue;
     38             }
     39             if(!vis[dx][dy]&&mp[dx][dy]!='#'&&(num[dx][dy]>c+1||num[dx][dy]==-1)){
     40                 vis[dx][dy]=1;
     41                 que[r].x=dx;
     42                 que[r].y=dy;
     43                 que[r++].c=c+1;
     44             }
     45         }
     46     }
     47 }
     48 
     49 int main()
     50 {
     51     int T,x,y;
     52     int i,j,k;
     53     int l,r;
     54 
     55     scanf("%d",&T);
     56     while(T--)
     57     {
     58         int tot=0;
     59         scanf("%d%d",&n,&m);
     60         for(i=0;i<n;i++)
     61         {
     62             getchar();
     63             for(j=0;j<m;j++)
     64             {
     65                 scanf("%c",&mp[i][j]);
     66                 if(mp[i][j]=='J'){
     67                     x=i;
     68                     y=j;
     69                 }
     70                 if(mp[i][j]=='F'){
     71                     xi[tot]=i;
     72                     yi[tot++]=j;
     73                 }
     74             }
     75         }
     76 
     77         memset(num,-1,sizeof(num));
     78         memset(vis,0,sizeof(vis));
     79         for(i=0;i<tot;i++)
     80         {
     81             vis[xi[i]][yi[i]]=1;
     82             que[i].x=xi[i];
     83             que[i].y=yi[i];
     84             que[i].c=1;
     85         }
     86         bfs(0,tot);
     87 
     88         memset(vis,0,sizeof(vis));
     89         flog=0;
     90         que[0].x=x;
     91         que[0].y=y;
     92         que[0].c=1;
     93         bfs(0,1);
     94         
     95         if(flog){
     96             printf("%d
    ",que[0].c);
     97         }else {
     98             printf("IMPOSSIBLE
    ");
     99         }
    100     }
    101     return 0;
    102 }
    103 /*
    104 8 8
    105 ........
    106 ..F...F.
    107 ....J...
    108 ...F....
    109 ......F.
    110 ........
    111 ........
    112 ........
    113 
    114 5 5
    115 .....
    116 .###.
    117 .#J#.
    118 .###.
    119 .....
    120 
    121 5 5
    122 .....
    123 .#F#.
    124 .FJF.
    125 .#F#.
    126 .....
    127 
    128 5 5
    129 ....F
    130 .#.#.
    131 ..J..
    132 .#.#.
    133 F....
    134 
    135 5 5
    136 ....F
    137 .#.#.
    138 ..J..
    139 .#.#.
    140 .....
    141 */
    View Code
  • 相关阅读:
    python中使用schedule模块定时执行任务
    python marshmallow库
    shell 脚本根据名称查找进程id会多出来两个id号
    docker随笔(1)
    python实现-kafka作为消息中间件 -实现数据生产和消费-实用的脚本
    python-kafka文档
    mysql文档
    VMware pro15安装centos7
    excel表计算和计算器计算结果不一致
    jmeter安装部署、maven路径配置
  • 原文地址:https://www.cnblogs.com/zstu-abc/p/3228451.html
Copyright © 2011-2022 走看看