zoukankan      html  css  js  c++  java
  • uva159 象棋

    这道题看起来非常复杂,,,看了看大佬们的代码感觉太优秀了。。。。。用最简单的方法考虑所有未知。。。。。。。不浪费一行代码/。。。

      1 #include <stdio.h>
      2 
      3 #include <stdlib.h>
      4 
      5 #include <string.h>
      6 
      7 char a[15][15];
      8 
      9 const int dr[4]= {-1,1,0,0},dc[4]= {0,0,-1,1};
     10 
     11 const int Horser[8]= {-2,-2,-1,-1,1,1,2,2};
     12 
     13 const int Horsec[8]= {-1,1,-2,2,-2,2,-1,1};
     14 
     15 const int Stoner[8]= {-1,-1,-1,-1,1,1,1,1};
     16 
     17 const int Stonec[8]= {-1,1,-1,1,-1,1,-1,1};
     18 
     19 int check(int r,int c)//返回值为0表示安全,1表示不安全
     20 
     21 {
     22 
     23     int i,j,t,patten;
     24 
     25     for(t=0; t<=3; t++)
     26 
     27     {
     28 
     29         patten=1;
     30 
     31         for(i=r+dr[t],j=c+dc[t]; i>=1&&i<=10&&j>=1&&j<=9; i+=dr[t],j+=dc[t])
     32 
     33         {
     34 
     35             if(patten==1)//找车将
     36 
     37             {
     38 
     39                 if(a[i][j])
     40 
     41                 {
     42 
     43                     if(a[i][j]=='G'||a[i][j]=='R')
     44 
     45                         return 1;
     46 
     47                     else
     48 
     49                         patten=2;
     50 
     51                 }
     52 
     53             }
     54 
     55             else if(patten==2)//找炮
     56 
     57             {
     58 
     59                 if(a[i][j])
     60 
     61                 {
     62 
     63                     if(a[i][j]=='C')
     64 
     65                         return 1;
     66 
     67                     else
     68 
     69                         break;
     70 
     71                 }
     72 
     73             }
     74 
     75         }
     76 
     77     }
     78 
     79     for(i=0; i<=7; i++)//找马
     80 
     81     {
     82 
     83         if(!(r+Horser[i]>=1&&r+Horser[i]<=10&&c+Horsec[i]>=1&&c+Horsec[i]<=9))
     84 
     85             continue;
     86 
     87         if(a[r+Horser[i]][c+Horsec[i]]=='H'&&!a[r+Stoner[i]][c+Stonec[i]])
     88 
     89             return 1;
     90 
     91     }
     92 
     93     return 0;
     94 
     95 }
     96 
     97 int main()
     98 
     99 {
    100 
    101     int i,n,r,c,rr,cc,result;
    102 
    103     char ch;
    104 
    105     while(1)
    106 
    107     {
    108 
    109         memset(a,0,sizeof a);
    110 
    111         result=1;
    112 
    113         scanf("%d%d%d",&n,&r,&c);
    114 
    115         if(!n&&!r&&!c)
    116 
    117             break;
    118 
    119         for(i=0; i<=n-1; i++)
    120 
    121         {
    122 
    123             scanf(" %c%d%d",&ch,&rr,&cc);
    124 
    125             a[rr][cc]=ch;
    126 
    127         }
    128 
    129         for(i=r+1; i<=10; i++)
    130 
    131         {
    132 
    133             if(a[i][c])
    134 
    135             {
    136 
    137                 if(a[i][c]=='G')
    138 
    139                     result=0;
    140 
    141                    break;
    142 
    143             }
    144 
    145         }
    146 
    147         if(result)
    148 
    149         {
    150 
    151             for(i=0; i<=3; i++)
    152 
    153             {
    154 
    155                 if(r+dr[i]<1||r+dr[i]>3||c+dc[i]<4||c+dc[i]>6)
    156 
    157                     continue;
    158 
    159                 if(!check(r+dr[i],c+dc[i]))
    160 
    161                 {
    162 
    163                     result=0;
    164 
    165                     break;
    166 
    167                 }
    168 
    169             }
    170 
    171         }
    172 
    173         if(result)
    174 
    175             printf("YES
    ");
    176 
    177         else
    178 
    179             printf("NO
    ");
    180 
    181     }
    182 
    183     return 0;
    184 
    185 }

    此题中关于棋子的行走方法设计十分·巧妙此类的方法感觉受益匪浅。。。。

  • 相关阅读:
    spoj 104 Highways (最小生成树计数)
    bzoj 1912 巡逻(树直径)
    BZOJ 3534 重建
    BZOJ 3143 游走(高斯消元)
    在Windows下编译PyCaffe
    caffe的Matlab接口的使用方法
    NewRelic性能监控之APM
    MariaDB-10.x二进制包安装
    mongoDB-3.x Balancer Management
    mongoDB-3.x集群管理
  • 原文地址:https://www.cnblogs.com/jrjxt/p/10457009.html
Copyright © 2011-2022 走看看