就是声明两个数组,一个模拟棋局,另一个模拟黑将不能走的位置。不过写得有点长了...
#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; } ; }