zoukankan      html  css  js  c++  java
  • 【HDOJ】1175 连连看

    BFS。wa了一下午,原来是YES,写成了Yes。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 typedef struct node_st{
     8     int x, y;
     9     int dir;
    10     int turn;
    11     node_st() {}
    12     node_st(int xx, int yy, int ddir, int tturn) {
    13         x = xx; y = yy; dir = ddir; turn = tturn;
    14     }
    15 } node_st;
    16 
    17 int map[1005][1005];
    18 int n, m;
    19 int dirs[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
    20 char turns[1005][1005];
    21 
    22 bool bfs(int bx, int by, int ex, int ey) {
    23     queue<node_st> que;
    24     bool val = false;
    25     node_st node;
    26     int x, y, dir, turn;
    27 
    28     memset(turns, 0, sizeof(turns));
    29     turns[bx][by] = 1;
    30     que.push(node_st(bx, by, -1, 0));
    31 
    32     while ( !que.empty() ) {
    33         node = que.front();
    34         //printf("x=%d, y=%d, dir=%d, turn=%d
    ", node.x, node.y, node.dir, node.turn);
    35         if (node.x == ex && node.y == ey) {
    36             val = true;
    37             break;
    38         }
    39         que.pop();
    40         for (int i=0; i<4; ++i) {
    41             x = node.x + dirs[i][0];
    42             y = node.y + dirs[i][1];
    43             dir = i;
    44             turn = node.turn;
    45             if (x<1 || x>n || y<1 || y>m)
    46                 continue;
    47             if (map[x][y] && (x!=ex || y!=ey))
    48                 continue;
    49             if (dir!=node.dir && node.dir!=-1)
    50                 ++turn;
    51             //printf("	x=%d, y=%d, dir=%d, turn=%d
    ", x, y, dir, turn);
    52             if (turn > 2)
    53                 continue;
    54             if (turns[x][y]==0 || turn+1 <= turns[x][y]) {
    55                 turns[x][y] = turn+1;
    56                 que.push(node_st(x, y, dir, turn));
    57             }
    58         }
    59     }
    60 
    61     return val;
    62 }
    63 
    64 int main() {
    65     int q, x1, x2, y1, y2;
    66     int i, j;
    67 
    68     while (scanf("%d %d", &n, &m)!=EOF && (n||m)) {
    69         for (i=1; i<=n; ++i)
    70             for (j=1; j<=m; ++j)
    71                 scanf("%d", &map[i][j]);
    72         scanf("%d", &q);
    73         while (q--) {
    74             scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    75             if (x1==x2 && y1==y2) {
    76                 printf("NO
    ");
    77                 continue;
    78             }
    79             if (map[x1][y1]!=map[x2][y2] || map[x1][y1]==0 || map[x2][y2]==0) {
    80                 printf("NO
    ");
    81                 continue;
    82             }
    83             if ( bfs(x1, y1, x2, y2) )
    84                 printf("YES
    ");
    85             else
    86                 printf("NO
    ");
    87         }
    88     }
    89 
    90     return 0;
    91 }
  • 相关阅读:
    澳洲中产收入水平[转]
    [转载]在澳洲做IT人士的收入差别
    取消excel 工作保护 密码的宏
    SAP ML 物料分类账详解(含取消激活物料帐方法)
    ABAP--如何创建自定义打印条码
    SAP 产品条码WMS结合 以及ABAP script的集成 BarCode
    SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing
    SAP HR模块的基础数据表和增强配置
    SAP财务供应链与金库管理的联系与区别
    评点SAP HR功能及人力资源管理软件
  • 原文地址:https://www.cnblogs.com/bombe1013/p/3704195.html
Copyright © 2011-2022 走看看