zoukankan      html  css  js  c++  java
  • [HDOJ2355]The Sidewinder Sleeps Tonite

    简单搜索题目~

    View Code
    1 #include <iostream>
    2 #define SIZE 64
    3 usingnamespace std;
    4 constint dx[] = {-1,0,1,0};
    5 constint dy[] = {0,1,0,-1};
    6 constint stepx[] = {0,-1,-1,0,1,1};
    7 constint stepy[] = {-2,-1,1,2,1,-1};
    8 int hi,wi;
    9 char puzzle[SIZE][SIZE];
    10 bool vis[SIZE][SIZE];
    11 bool legal(int x,int y)
    12 {
    13 return x >=0&& x < hi && y >=0&& y < wi;
    14 }
    15 bool checkDeg()
    16 {
    17 for (int i =0;i < hi;i++)
    18 for (int j =0;j < wi;j++)
    19 if (puzzle[i][j] =='#')
    20 {
    21 int deg =0;
    22 for (int k =0;k <4;k++)
    23 {
    24 int nx = i + dx[k];
    25 int ny = j + dy[k];
    26 if (legal(nx,ny) && (((k ==0|| k ==2) && puzzle[nx][ny] =='|') || ((k ==1|| k ==3) && puzzle[nx][ny] =='-')))
    27 deg++;
    28 }
    29 if (deg !=0&& deg !=2)
    30 returnfalse;
    31 }
    32 returntrue;
    33 }
    34 bool checkNum()
    35 {
    36 for (int i =0;i < hi;i++)
    37 for (int j =0;j < wi;j++)
    38 if (puzzle[i][j] >='0'&& puzzle[i][j] <='9')
    39 {
    40 int deg =0;
    41 for (int k =0;k <4;k++)
    42 {
    43 int nx = i + dx[k];
    44 int ny = j + dy[k];
    45 if (legal(nx,ny) && (((k ==0|| k ==2) && puzzle[nx][ny] =='-') || ((k ==1|| k ==3) && puzzle[nx][ny] =='|')))
    46 deg++;
    47 }
    48 if (deg != puzzle[i][j] -'0')
    49 returnfalse;
    50 }
    51 returntrue;
    52 }
    53 void DFS(int x,int y)
    54 {
    55 vis[x][y] =true;
    56 for (int i =0;i <6;i++)
    57 {
    58 if (puzzle[x][y] =='-')
    59 {
    60 int nx = x + stepx[i];
    61 int ny = y + stepy[i];
    62 if (legal(nx,ny) &&!vis[nx][ny] && (puzzle[nx][ny] =='-'|| puzzle[nx][ny] =='|'))
    63 DFS(nx,ny);
    64 }
    65 else
    66 {
    67 int nx = x + stepy[i];
    68 int ny = y + stepx[i];
    69 if (legal(nx,ny) &&!vis[nx][ny] && (puzzle[nx][ny] =='-'|| puzzle[nx][ny] =='|'))
    70 DFS(nx,ny);
    71 }
    72 }
    73 }
    74 bool checkConn()
    75 {
    76 bool ok =true;
    77 memset(vis,false,sizeof(vis));
    78 for (int i =0;i < hi && ok;i++)
    79 for (int j =0;j < wi && ok;j++)
    80 if (puzzle[i][j] =='-')
    81 {
    82 DFS(i,j);
    83 ok =false;
    84 }
    85 if(ok) returnfalse;
    86 for (int i =0;i < hi;i++)
    87 for (int j =0;j < wi;j++)
    88 if ((puzzle[i][j] =='-'|| puzzle[i][j] =='|') &&!vis[i][j])
    89 returnfalse;
    90 returntrue;
    91 }
    92 int main()
    93 {
    94 int cas;
    95 scanf("%d",&cas);
    96 while (cas--)
    97 {
    98 scanf("%d %d",&hi,&wi);
    99 hi = hi *2+1;
    100 wi = wi *2+1;
    101 for (int i =0;i < hi;i++)
    102 scanf("%s",puzzle[i]);
    103 if (checkDeg() && checkNum() && checkConn()) printf("VALID\n");
    104 else printf("INVALID\n");
    105 }
    106 return0;
    107 }
  • 相关阅读:
    20100720 14:14 转:BW十日谈之标准数据源
    BW会计年度期间转换出错
    SQL Server 2005 Logon Triggers 详细介绍
    作业输出文档维护
    windows 系统监视器 以及建议阀值
    linkedserver 的使用
    DAC 连接数据库需要做些什么
    SQL Server 2008新特性 Merge 详细见联机手册
    【20110406】提高数据库可用性需要注意的问题
    索引迁移
  • 原文地址:https://www.cnblogs.com/debugcool/p/HDOJ2355.html
Copyright © 2011-2022 走看看