zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    linux下nginx+php+mysql环境搭建
    Linux下配置安装PHP环境
    什么是Apache APR
    全端之Jquery--操作属性
    全端之jQuery基本语法
    全端之Javascript(操作DOM对象二)
    全端之Javascript(DOM对象三)
    全端之Javascript(DOM对象一)
    全端之Javascript对象
    全端开发——css(操作属性补充)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4047839.html
Copyright © 2011-2022 走看看