传送门:UVA-220
思路很好想,写个对某一位置判别合法性的函数,输出个数的时候应该占三个位(这里presentation error了几次)。
AC代码:
#include<iostream>
#include<fstream>
using namespace std;
char pq[10][10];//存储棋盘
char rev(char tmp){if(tmp=='B') return 'W';else if(tmp=='W') return 'B';}//转换下棋方
bool test(int x,int y,char player,int swft)//如果swft是1就改变棋盘,否则只对该位置进行合法性判断
{//分八个方向进行判断
if(pq[x][y]!='-') return false;
int cnt=0,pos=x-1,posx,posy,flag=0;//flag为1表示该位置合法,cnt表示夹住的敌方棋子数
char enemy=rev(player);//敌方颜色
while(pos>1&&pq[pos][y]==enemy) ++cnt,--pos;
if(pq[pos][y]==player&&cnt){
if(swft) for(int i=x;i>pos;--i) pq[i][y]=player;
flag=1;}
cnt=0;pos=y-1;
while(pos>1&&pq[x][pos]==enemy) ++cnt,--pos;
if(pq[x][pos]==player&&cnt){
if(swft) for(int i=y;i>pos;--i) pq[x][i]=player;
flag=1;}
cnt=0;pos=x+1;
while(pos<8&&pq[