就是声明两个数组,一个模拟棋局,另一个模拟黑将不能走的位置。不过写得有点长了...

 #include<iostream>
 #include<string>
 using namespace std;

 struct Node
 {
     ];
     int x, y;
 }a[];

 ][];  //模拟棋盘棋子的情况
 ][];  //模拟黑棋不能走的情况
 int bh, bs;       //黑色棋子的坐标

 void G(int x, int y)                      //模拟帅棋子
 {
     ;
     ; i < x; i++)
     {
         if (vis[i][y])
         {
             flag = ;
             break;
         }
     }
     )
     {
         cnt[][y] = ;
         cnt[][y] = ;
         cnt[][y] = ;
     }
 }

 void R(int x, int y)                     //模拟车棋子
 {
     ;
      && y < )
     {
         ; i < ; i++)
         {
             if (vis[x][i])
             {
                 flag = ;
                 break;
             }
         }
     }
      && y>)
     {
         ; i < y; i++)
         {
             if (vis[x][i])
             {
                 flag = ;
                 break;
             }
         }
     }
      && y <= )
     {
         ; i < y; i++)
         {
             if (vis[i][y])
             {
                 flag = ;
                 break;
             }
         }
     }
     )
     {
         )
         {
             cnt[x][] = ;
             cnt[x][] = ;
             cnt[x][] = ;
         }
         )
         {
             cnt[][y] = ;
             cnt[][y] = ;
             cnt[][y] = ;
         }
     }
 }

 void C(int x, int y)                //模拟炮棋子
 {
     ;
      && y < )
     {
         ; i < ; i++)
         {
             if (vis[x][i])
             {
                 cnt[x][] = ;
                 cnt[x][] = ;
                 cnt[x][] = ;
                 break;
             }
         }
     }
      && y > )
     {
         ; i < y; i++)
         {
             if (vis[x][i])
             {
                 cnt[x][] = ;
                 cnt[x][] = ;
                 cnt[x][] = ;
             }
         }
     }
      && y >=  && y <= )
     {
         ; i < x; i++)
         {
             if (vis[i][y])
             {
                 cnt[][y] = ;
                 cnt[][y] = ;
                 cnt[][y] = ;
             }
         }
     }
 }

 void H(int x, int y)                      //模拟马棋子
 {
      > )
     {
         ][y])
         {
              > )
             {
                 cnt[x - ][y - ] = ;
             }
              < )
             {
                 cnt[x + ][y + ] = ;
             }
         }
     }
      < )
     {
         ][y])
         {
              > )
             {
                 cnt[x + ][y - ] = ;
             }
              < )
             {
                 cnt[x + ][y + ] = ;
             }
         }
     }
      > )
     {
         ])
         {
              > )
             {
                 cnt[x - ][y - ] = ;
             }
              < )
             {
                 cnt[x + ][y - ] = ;
             }
         }
     }
      < )
     {
         ])
         {
              > )
             {
                 cnt[x - ][y + ] = ;
             }
              < )
             {
                 cnt[x + ][y + ] = ;
             }
         }
     }
 }

 int _tmain(int argc, _TCHAR* argv[])
 {

     int n;            //红色棋子的个数
     while (cin >> n >> bh >> bs && n)
     {
         memset(vis, , sizeof(vis));
         memset(cnt, , sizeof(cnt));
         ; i < n; i++)
         {
             cin >> a[i].ch >> a[i].x >> a[i].y;
             vis[a[i].x][a[i].y] = ;
         }
         ; i < n; i++)
         {
             ] == 'G')   G(a[i].x, a[i].y);
             ] == 'R')   R(a[i].x, a[i].y);
             ] == 'C')   C(a[i].x, a[i].y);
             ] == 'H')   H(a[i].x, a[i].y);
         }
         ;
         >)
         {
             ][bs])
                 flag = ;
         }
          < )
         {
             ][bs])
                 flag = ;
         }
          > )
         {
             ])
                 flag = ;
         }
          < )
         {
             ])
                 flag = ;
         }
         )
             cout << "NO" << endl;
         else
             cout << "YES" << endl;
         cout << endl;
     }
     ;
 }
05-08 08:28