2つの主流のアイデア:
1.ボードを直接スキャンして、4方向に1つずつトラバースします。これは面倒なだけでなく、ばかげています。
2.子供を落とすたびに、子供の4つの方向が直接判断され、左右の方向を1つの方向に合計できます。
#include <iostream> #include <vector> #include < string > using namespace std; const int maxn = 13 ; int ma [maxn] [maxn]; void printma(){ for(int i = 0 ; i <maxn; i ++ ){ for(int j = 0 ; j <maxn; j ++ ){ if(ma [i] [j] == 1 ){ cout << " o " ; } else if(ma [i] [j] ==- 1 ){ cout << " x " ; } else { cout << " #" ; } cout << " " ; } cout << endl; } } int henc(int x、int y){ int cnt = 0 ; for(inti = x; i <maxn && ma [x] [y] == ma [i] [y]; i ++ ){ cnt ++ ; } for(int i = x- 1 ; i> = 0 && ma [x] [y] == ma [i] [y]; i-- ) cnt ++ ; cntを返します。 } int shuc(int x、int y){ int cnt = 0 ; for(int i = y; i <maxn && ma [x] [y] == ma [x] [i]; i ++ ){ cnt ++ ; } for(inti = y- 1 ; i> = 0 && ma [x] [y] == ma [x] [i]; i-- ) cnt ++ ; cntを返します。 } int xzc(int x、int y){ int cnt = 0 ; for(int i = x、j = y; i <maxn && y <maxn && ma [x] [y] == ma [i] [j]; i ++、j ++ ){ cnt ++ ; } for(int i = x- 1、j = y- 1 ; i> = 0 && y> = 0 && ma [x] [y] == ma [i] [j]; i--、j--){ cnt ++ ; } return cnt; } int xyc(int x、int y){ int cnt = 0 ; for(int i = x、j = y; i> = 0 && y <maxn && ma [x] [y] == ma [i] [j]; i--、j ++ ){ cnt ++ ; } for(int i = x、j = y; i <maxn && y> = 0 && ma [x] [y] == ma [i] [j]; i ++、j-- ){ cnt ++ ; } return cnt; } bool charge(int x、int y){ if(henc(x、y)== 5 || shuc(x、y)== 5 || xzc(x、y)== 5 || xyc(x、y )== 5 ) trueを返し ます。 それ以外の場合は falseを返し ます。 } int main(){ int x、y; int f = 1 ; while(1 ){ cin >> x >> y; ma [x] [y] = f; printma(); もし(charge(x、y)){ if(f == 1 ){ cout << " 黑o胜利" << endl; } else { cout << " 白x胜利" << endl; } 休憩; } f = -f; } return 1 ; }