4

POJ 2996 - Help Me with the Game

 2 years ago
source link: https://exp-blog.com/algorithm/poj/poj2996-help-me-with-the-game/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Help Me with the Game


提示: 很烦很简单的国际象棋棋盘模拟,输入比较麻烦而已。

这题是 [POJ2993](.//Memory Time
//236K 0MS

#include
using namespace std;

class white_piece
{
public:
int row;
char col;
bool flag; //在class中bool型的默认值为false
}K,Q,R[3],B[3],N[3];

bool pawn[9][‘i’]={false}; //记录白色pawn的位置
int PR=0,PB=0,PN=0; //同类型棋子的指针

class black_piece
{
public:
int row;
char col;
bool flag;
}k,q,r[2],b[2],n[2],p[8];

int pr=0,pb=0,pn=0,pp=0;

char chess[9][‘i’]; // ASCII: ‘i’>’I’,use the Row 1 to 8,and Col ‘a’ to ‘h’
int x,z;
char y;
int w_count=0; //白棋总数
int b_count=0; //黑棋总数

void judge(void)
{
if(chess[x][y]==’.’ || chess[x][y]==’:’)
return;
else if(chess[x][y]==’k’) //黑棋判断
{
k.row=9-x;
k.col=y;
k.flag=true;
b_count++;
return;
}
else if(chess[x][y]==’q’)
{
q.row=9-x;
q.col=y;
q.flag=true;
b_count++;
return;
}
else if(chess[x][y]==’r’)
{
r[pr].row=9-x;
r[pr++].col=y;
b_count++;
return;
}
else if(chess[x][y]==’b’)
{
b[pb].row=9-x;
b[pb++].col=y;
b_count++;
return;
}
else if(chess[x][y]==’n’)
{
n[pn].row=9-x;
n[pn++].col=y;
b_count++;
return;
}
else if(chess[x][y]==’p’)
{
p[pp].row=9-x;
p[pp++].col=y;
b_count++;
return;
}
else if(chess[x][y]==’K’) //白棋判断
{
K.row=9-x;
K.col=y;
K.flag=true;
w_count++;
return;
}
else if(chess[x][y]==’Q’)
{
Q.row=9-x;
Q.col=y;
Q.flag=true;
w_count++;
return;
}
else if(chess[x][y]==’R’)
{
R[PR].row=9-x;
R[PR++].col=y;
w_count++;
return;
}
else if(chess[x][y]==’B’)
{
B[PB].row=9-x;
B[PB++].col=y;
w_count++;
return;
}
else if(chess[x][y]==’N’)
{
N[PN].row=9-x;
N[PN++].col=y;
w_count++;
return;
}
else if(chess[x][y]==’P’)
{
pawn[9-x][y]=true;
w_count++;
return;
}
}

void Print(void)
{
cout<<”White: “;
if(K.flag)
{
cout<<’K’<<K.col<<K.row;
if(–w_count>0)
cout<<’,’;
}
if(Q.flag)
{
cout<<’Q’<<Q.col<<Q.row;
if(–w_count>0)
cout<<’,’;
}

if(PR==2)
    if(R[1].row<R[0].row)
    {
        R[2]=R[0];
        R[0]=R[1];
        R[1]=R[2];
    }
for(x=0;x<PR;x++)
{
    cout<<'R'<<R[x].col<<R[x].row;
    if(--w_count>0)
        cout<<',';
}

if(PB==2)
    if(B[1].row<B[0].row)
    {
        B[2]=B[0];
        B[0]=B[1];
        B[1]=B[2];
    }
for(x=0;x<PB;x++)
{
    cout<<"B"<<B[x].col<<B[x].row;
    if(--w_count>0)
        cout<<',';
}

if(PN==2)
    if(N[1].row<N[0].row)
    {
        N[2]=N[0];
        N[0]=N[1];
        N[1]=N[2];
    }
for(x=0;x<PN;x++)
{
    cout<<'N'<<N[x].col<<N[x].row;
    if(--w_count>0)
        cout<<',';
}

for(x=1;x<=8;x++)
    for(y='a';y<='h';y++)
        if(pawn[x][y])
        {
            cout<<y<<x;
            if(--w_count>0)
                cout<<',';
        }

cout<<endl;

cout<<"Black: ";
if(k.flag)
{
    cout<<'K'<<k.col<<k.row;
    if(--b_count>0)
        cout<<',';
}
if(q.flag)
{
    cout<<'Q'<<q.col<<q.row;
    if(--b_count>0)
        cout<<',';
}
for(x=0;x<pr;x++)
{
    cout<<'R'<<r[x].col<<r[x].row;
    if(--b_count>0)
        cout<<',';
}
for(x=0;x<pb;x++)
{
    cout<<"B"<<b[x].col<<b[x].row;
    if(--b_count>0)
        cout<<',';
}
for(x=0;x<pn;x++)
{
    cout<<'N'<<n[x].col<<n[x].row;
    if(--b_count>0)
        cout<<',';
}
for(x=0;x<pp;x++)
{
    cout<<p[x].col<<p[x].row;
    if(--b_count>0)
        cout<<',';
}

cout<<endl;

return;

int main(void)
{
char temp;

/*Input*/

for(z=0;z<33;z++)
    cin>>temp;

for(x=1;x<=8;x++)
{
    cin>>temp;
    for(y='a';y<='h';y++)
    {
        cin>>temp>>chess[x][y]>>temp>>temp;
        judge();
    }
    for(z=0;z<33;z++)
        cin>>temp;
}

/*Print*/

Print();

return 0;

------


## 相关资料

- [北大 ACM - POJ 试题分类](https://exp-blog.com/algorithm/poj-shi-ti-fen-lei/)
- [北大 POJ 题库(官网在线)](http://poj.org/)
- [北大 POJ 题库(离线版)](https://github.com/lyy289065406/POJ-Solving-Reports/doc/POJ%E7%A6%BB%E7%BA%BF%E7%89%88%E9%A2%98%E7%9B%AE.chm)
- [POJ封面书《程序设计导引及在线实践》](https://github.com/lyy289065406/POJ-Solving-Reports/doc/程序设计导引及在线实践.pdf)
- [ACM 资料](https://lyy289065406.github.io/articles/tags/ACM/)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK