zoukankan      html  css  js  c++  java
  • Zoj 3865 Superbot

    按规则移动机器人 , 问是否能拾得宝藏 。 

    加了一个控制板 , 还增加了一个控制板移动周期 p 

    将移动周期变换一下 , 移动一次  就相当于光标向左不耗费时间的移动了一格

    搜索思路 : 搜索当前格子到上下左右四个格子所花费的最短时间 。

    记录光标的信息 , 和当前格子所需最短时间 。

    bfs + bfs

      1 #include <bits/stdc++.h>
      2 using namespace std;
      3 #define PI acos(-1.0)
      4 #define MAXN 20
      5 #define INF 0x3f3f3f3f
      6 int p,min_num;
      7 int n,m;
      8 int G[MAXN][MAXN];
      9 int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
     10 struct point
     11 {
     12     int x;
     13     int y;
     14 }start,pos;
     15 struct base
     16 {
     17     int cnt;
     18     int t;
     19 }step[MAXN][MAXN];
     20 int read_ch(int x, int y)
     21 {
     22     char ch;
     23     while(ch = getchar())
     24     {
     25         if(ch == '@')
     26         {
     27             start.x=x;
     28             start.y=y;
     29             return true;
     30         }
     31         if(ch == '.') return true;
     32         if(ch == '$')
     33         {
     34             pos.x=x;
     35             pos.y=y;
     36             return true;
     37         }
     38         if(ch == '*') return false;
     39     }
     40 }
     41 void show()
     42 {
     43     for(int i = 1 ; i <= n ; i ++,cout<<endl)
     44         for(int j = 1 ; j <= m ; j ++)
     45             printf(step[i][j].cnt == INF?"INF ":"%3d ", step[i][j].cnt);
     46     cout<<endl;
     47 }
     48 int bfs(int t,int cnt,int pos)
     49 {
     50     queue <int> Q;
     51     int temp=0;
     52     Q.push(cnt);
     53     Q.push(temp);
     54     while(!Q.empty())
     55     {
     56         int x=Q.front();
     57         Q.pop();
     58         temp=Q.front();
     59         Q.pop();
     60 
     61         if(((t+temp) % p == 0) && (t + temp)) x = (x + 3) % 4;
     62 
     63         Q.push((x+3)%4);
     64         Q.push(temp+1);
     65 
     66         Q.push(x);
     67         Q.push(temp+1);
     68 
     69         Q.push((x+1)%4);
     70         Q.push(temp+1);
     71 
     72         if(x == pos) return t+temp+1;
     73     }
     74     return INF;
     75 }
     76 void _bfs()
     77 {
     78     memset(step,0x3f,sizeof(step));
     79     step[start.x][start.y].cnt=0;
     80     step[start.x][start.y].t=0;
     81     queue <int> Q;
     82     Q.push(start.x);
     83     Q.push(start.y);
     84     while(!Q.empty())
     85     {
     86         int x = Q.front();
     87         Q.pop();
     88         int y = Q.front();
     89         Q.pop();
     90 
     91         if(x < 1 || x > n || y < 1 || y > m || !G[x][y]) continue;
     92 
     93         for(int i=0;i<4;i++)
     94         {
     95             int xx = x + dir[i][0];
     96             int yy = y + dir[i][1];
     97 
     98             if(xx < 1 || xx > n || yy < 1 || yy > m || !G[xx][yy]) continue;
     99 
    100             int temp = bfs(step[x][y].t,step[x][y].cnt,i);
    101             if(temp < step[xx][yy].t)
    102             {
    103                 step[xx][yy].t = temp;
    104                 step[xx][yy].cnt = i;
    105                 Q.push(xx);
    106                 Q.push(yy);
    107                 //printf("x:%2d y:%2d cnt:%2d xx:%2d yy:%2d 
    ",x,y,i,xx,yy);
    108                 //show();
    109             }
    110         }
    111     }
    112 }
    113 int main()
    114 {
    115     int T;
    116     scanf("%d",&T);
    117     while(T--)
    118     {
    119         scanf("%d %d %d",&n,&m,&p);
    120         memset(G,false,sizeof(G));
    121         for(int i=1;i<=n;i++)
    122             for(int j=1;j<=m;j++)
    123             G[i][j]=read_ch(i,j);
    124         _bfs();
    125         printf(step[pos.x][pos.y].t != INF?"%d
    ":"YouBadbad
    ",step[pos.x][pos.y].t);
    126     }
    127     return 0;
    128 }
  • 相关阅读:
    基于Zabbix 3.2.6版本的Discovery
    Zabbix 3.2.6使用注意事项
    Zabbix 3.2.6安装过程
    自动安装lnmp
    [ORACLE]PL/SQL 用户登录出现ORA-12170:TNS:连接超时 等Oracle无法正常登录问题解决方案
    [ORACLE]尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
    页面从简体字乱码为另外的简体字
    VScode使用问题总结
    数据备份与恢复
    BinLog日志
  • 原文地址:https://www.cnblogs.com/By-ruoyu/p/4437587.html
Copyright © 2011-2022 走看看