uva 10196 check the check (一)

2014-11-24 00:43:50 · 作者: · 浏览: 5
[cpp]
#include
#include
#include
#include
using namespace std;
int flagData[9][9],data[9][9];
char image[9][9];
int blackKingX, blackKingY, whiteKingX, whiteKingY;
int p_dx[]={1,1},p_dy[]={1,-1},P_dx[]={-1,-1},P_dy[]={1,-1};
int R_r_dx[]={0,0,1,-1 }, R_r_dy[]={1,-1,0,0 };
int B_b_dx[]={1,-1,1,-1}, B_b_dy[]={1,-1,-1,1};
int Q_q_dx[]={1,-1,1,-1,0,0,1,-1 }, Q_q_dy[]={1,-1,-1,1,1,-1,0,0 };
int K_k_dx[]={1,-1,1,-1,0,0,1,-1 }, K_k_dy[]={1,-1,-1,1,1,-1,0,0 };
int N_n_dx[]={-1,-2,-2,-1,1,2,2,1}, N_n_dy[]={-2,-1,1,2,2,1,-1,-2};
int checkTheNext(int x, int y)
{
if (x >= 0 && x < 8 && y >= 0 && y < 8)
{
if (flagData[x][y] == 1)
return 2;
else return 1;
}
else return 0;
}
void p(int x, int y)
{
for (int i = 0; i < 2; i++)
{
int newx = x + p_dx[i];
int newy = y + p_dy[i];
if (checkTheNext(newx, newy))
{
if (data[newx][newy] == 0 || data[newx][newy] == 1)
data[newx][newy] = 1;
else data[newx][newy] = 3;
}
}
}
int P(int x, int y)
{
for (int i = 0; i < 2; i++)
{
int newx = x + P_dx[i];
int newy = y + P_dy[i];
if (checkTheNext(newx, newy))
{
if (data[newx][newy] == 0 || data[newx][newy] == 2)
data[newx][newy] = 2;
else data[newx][newy] = 3;
}
}
}
void R_r(int x, int y, int type)
{
for (int i = 0; i < 4; i++)
{
int temp;
int newx = x + R_r_dx[i];
int newy = y + R_r_dy[i];
temp = checkTheNext(newx, newy);
while (temp)
{
if (data[newx][newy] == 0 || data[newx][newy] == type)
data[newx][newy] = type;
else data[newx][newy] = 3;
if (temp == 2) break;
newx += R_r_dx[i];
newy += R_r_dy[i];
temp = checkTheNext(newx , newy);
}
}
}
void B_b(int x, int y, int type)
{
for (int i = 0; i < 4; i++)
{
int temp;
int newx = x + B_b_dx[i];
int newy = y + B_b_dy[i];
temp = checkTheNext(newx, newy);
while (temp)
{
if (data[newx][newy] == 0 || data[newx][newy] == type)
data[newx][newy] = type;
else data[newx][newy] = 3;
if (temp == 2) break;
newx += B_b_dx[i];
newy += B_b_dy[i];
temp = checkTheNext(newx , newy);
}
}
}
void Q_q(int x, int y, int type)
{
for (int i = 0; i < 8; i++)
{
int temp;
int newx = x + Q_q_dx[i];
int newy = y + Q_q_dy[i];
temp = checkTheNext(newx, newy);
while (temp)
{
if (data[newx][newy] == 0 || data[newx][newy] == type)
data[newx][newy] = type;
else data[newx][newy] = 3;
if (temp == 2) break;
newx += Q_q_dx[i];
newy += Q_q_dy[i];
temp = checkTheNext(newx , newy);
}
}
}
void K_k(int x, int y, int type)
{
for (int i = 0; i < 8; i++)
{
int newx = x + K_k_dx[i];
int newy = y + K_k_dy[i];
if (checkTheNext(newx, newy))
{
if (data[newx][newy] == 0 || data[newx][newy] == type)
data[newx][newy] = type;
else data[newx][newy] = 3;
}
}
}
v