• 【HDOJ】3500 Fling


    题意巨难懂。简言之,就是球互相碰撞时,主动碰撞的球将会停止,另一个球将沿着碰撞方向继续移动,不断碰撞。但是无法弹射紧挨着的球,但是若a弹射b,bc相邻,这种情况b可以弹射c。

      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 using namespace std;
      6 
      7 #define MAXN 10
      8 
      9 typedef struct {
     10     int x, y;
     11     char d;
     12 } node_t;
     13 
     14 node_t nodes[15];
     15 char map[MAXN][MAXN];
     16 int on;
     17 // U < L < R < D.
     18 int dir[4][2] = {-1,0,0,-1,0,1,1,0};
     19 
     20 bool check(int x, int y) {
     21     return x<0||x>=7||y<0||y>=8;
     22 }
     23 
     24 char getDir(int k) {
     25     if (k==0) return 'U';
     26     if (k==1) return 'L';
     27     if (k==2) return 'R';
     28     return 'D';
     29 }
     30 
     31 bool dfs(int n) {
     32     int i, j, k, x, y;
     33     bool flag;
     34 
     35     if (n == 0)
     36         return true;
     37 
     38     for (i=0; i<7; ++i) {
     39         for (j=0; j<8; ++j) {
     40             if (map[i][j] == 'O') {
     41                 for (k=0; k<4; ++k) {
     42                     x = i + dir[k][0];
     43                     y = j + dir[k][1];
     44                     if (check(x, y) || map[x][y]=='O')
     45                         continue;
     46                     flag = false;
     47                     while (!check(x, y)) {
     48                         if (map[x][y] == 'O') {
     49                             flag = true;
     50                             map[x][y] = 'X';
     51                             map[x-dir[k][0]][y-dir[k][1]] = 'O';
     52                         }
     53                         x += dir[k][0];
     54                         y += dir[k][1];
     55                     }
     56                     if (flag) {
     57                         map[i][j] = 'X';
     58                         nodes[n].x = i;
     59                         nodes[n].y = j;
     60                         nodes[n].d = getDir(k);
     61                         if (dfs(n-1))
     62                             return true;
     63                         do {
     64                             x -= dir[k][0];
     65                             y -= dir[k][1];
     66                             if (map[x][y] == 'O') {
     67                                 map[x][y] = 'X';
     68                                 map[x+dir[k][0]][y+dir[k][1]] = 'O';
     69                             }
     70                         } while (x!=i || y!=j);
     71                         map[i][j] = 'O';
     72                     }
     73                 }
     74             }
     75         }
     76     }
     77 
     78     return false;
     79 }
     80 
     81 int main() {
     82     int i = 0, j;
     83     int t = 0;
     84 
     85 #ifndef ONLINE_JUDGE
     86     freopen("data.in", "r", stdin);
     87 #endif
     88 
     89     while (scanf("%s", &map[i]) != EOF) {
     90         for (i=1; i<7; ++i)
     91             scanf("%s", &map[i]);
     92         on = 0;
     93         for (i=0; i<7; ++i)
     94             for (j=0; j<8; ++j)
     95                 if (map[i][j] == 'O')
     96                     ++on;
     97         dfs(on-1);
     98 
     99         if (t != 0)
    100             printf("
    ");
    101         printf("CASE #%d:
    ", ++t);
    102         for(i=on-1; i>=1; --i)
    103             printf("%d %d %c
    ", nodes[i].x, nodes[i].y, nodes[i].d);
    104         getchar();
    105         i = 0;
    106     }
    107 
    108     return 0;
    109 }
  • 相关阅读:
    如何判断touch到子视图或离开视图
    NSString属性声明中的copy和retain区别
    iOS创建PDF文件
    NSString的内存分配及管理
    清除新微博Cookie
    Object System (对象系统)
    基于组件的游戏编程
    继电器srd05vdcslc
    JavaScript专题(二):深入理解iframe
    Eclipse插件安装maven svn ibatis openExplorer PropertiesEditor
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4047839.html
Copyright © 2020-2023  润新知