UVA - 10196 - Check The Check
来源:互联网 发布:淘宝条形码 编辑:程序博客网 时间:2024/05/10 16:48
题目大意:对不同的棋子不同的走法
卒(p 或 P):只能吃斜前方一格的棋子;
马(n 或 N) :和中国象棋一样,走“日”字形,只有马可以越过其他棋子(不过没蹩马腿的规则);
象(b 或 B) :可以沿对角线向前向后走任意格,
车(r 或 R) :和中国象棋一样,走直线
后(q或 Q) :走法相当于 “车” 和 “象” 的组合,就是既可以直着走,又可以沿对角线
王(k或 K) :向任意八个方向走一格
判断是否有一方被”将军“了;大写字母代表黑方,小写字母代表白方,白方在棋盘下部,黑方在上部;
解题方法: 直接模拟,对每个位置的棋子判断一下,思路很清楚,其实很简单的;(代码写的稍微有点乱,616行,不过可以减少到500多行)
AC code:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
char board[10][10];
int main()
{
bool flag;
int cnt=0;
//freopen(\"in.txt\",\"r\",stdin);
while(1)
{
cnt++;
flag=false;
for(int i=0; i<8; i++)
{
gets(board[i]);
for(int j=0; !flag,j<8; j++)
if(board[i][j]!=\'.\')
{
flag=true;
break;
}
}
if(!flag) break;
getchar();
int mark=0;
for(int i=0; i<8; i++)
{
for(int j=0; j<8; j++)
{
switch (board[i][j])
{
case \'p\':
{
if(i+1<8)
{
if(j==0)
{
if(board[i+1][1]==\'K\')
{
mark=1;
break;
}
}
else if(j==7)
{
if(board[i+1][6]==\'K\')
{
mark=1;
break;
}
}
else
{
if(board[i+1][j-1]==\'K\'||board[i+1][j+1]==\'K\')
{
mark=1;
break;
}
}
}
break;
}
case \'P\':
{
if(i-1>=0)
{
if(j==0)
{
if(board[i-1][1]==\'k\')
{
mark=2;
break;
}
}
if(j==7)
{
if(board[i-1][6]==\'k\')
{
mark=2;
break;
}
}
else
{
if(board[i-1][j-1]==\'k\'||board[i-1][j+1]==\'k\')
{
mark=2;
break;
}
}
}
break;
}
case \'n\':
{
if(i+2<8)
{
if(j+1<8&&board[i+2][j+1]==\'K\')
{
mark=1;break;
break;
}
if(j-1>=0&&board[i+2][j-1]==\'K\')
{
mark=1;
break;
}
}
if(i-2>=0)
{
if(j+1<8 && board[i-2][j+1]==\'K\')
{
mark=1;
break;
}
if(j-1>=0 && board[i-2][j-1]==\'K\')
{
mark=1;
break;
}
}
if(i+1<8)
{
if(j+2<8 && board[i+1][j+2]==\'K\')
{
mark=1;
break;
}
if(j-2>=0 && board[i+1][j-2]==\'K\')
{
mark=1;
break;
}
}
if(i-1>=0)
{
if(j+2<8 && board[i-1][j+2]==\'K\')
{
mark=1;
break;
}
if(j-2>=0 && board[i-1][j-2]==\'K\')
{
mark=1;
break;
}
}
break;
}
case \'N\':
{
if(i+2<8)
{
if(j+1<8&&board[i+2][j+1]==\'k\')
{
mark=2;
break;
}
if(j-1>=0&&board[i+2][j-1]==\'k\')
{
mark=2;
break;
}
}
if(i-2>=0)
{
if(j+1<8 && board[i-2][j+1]==\'k\')
{
mark=2;
break;
}
if(j-1>=0 && board[i-2][j-1]==\'k\')
{
mark=2;
break;
}
}
if(i+1<8)
{
if(j+2<8 && board[i+1][j+2]==\'k\')
{
mark=2;
break;
}
if(j-2>=0 && board[i+1][j-2]==\'k\')
{
mark=2;
break;
}
}
if(i-1>=0)
{
if(j+2<8 && board[i-1][j+2]==\'k\')
{
mark=2;
break;
}
if(j-2>=0 && board[i-1][j-2]==\'k\')
{
mark=2;
break;
}
}
break;
}
case \'b\':
{
for(int s=i+1,t=j+1; s<8&&t<8; t++,s++)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i+1,t=j-1; s<8&&t>=0; t--,s++)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j-1; s>=0&&t>=0; t--,s--)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j+1; s>=0&&t<8; t++,s--)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
if(board[s][t]!=\'.\') break;
}
break;
}
case \'B\':
{
for(int s=i+1,t=j+1; s<8&&t<8; t++,s++)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i+1,t=j-1; s<8&&t>=0; t--,s++)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j-1; s>=0&&t>=0; t--,s--)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j+1; s>=0&&t<8; t++,s--)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
if(board[s][t]!=\'.\') break;
}
break;
}
case \'r\':
{
for(int t=i+1; t<8; t++)
if(board[t][j]==\'K\')
{
mark=1;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=i-1; t>=0; t--)
if(board[t][j]==\'K\')
{
mark=1;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=j+1; t<8; t++)
if(board[i][t]==\'K\')
{
mark=1;
break;
}
else if(board[i][t]!=\'.\')break;
for(int t=j-1; t>=0; t--)
if(board[i][t]==\'K\')
{
mark=1;
break;
}
else if(board[i][t]!=\'.\')break;
break;
}
case \'R\':
{
for(int t=i+1; t<8; t++)
if(board[t][j]==\'k\')
{
mark=2;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=i-1; t>=0; t--)
if(board[t][j]==\'k\')
{
mark=2;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=j+1; t<8; t++)
if(board[i][t]==\'k\')
{
mark=2;
break;
}
else if(board[i][t]!=\'.\')break;
for(int t=j-1; t>=0; t--)
if(board[i][t]==\'k\')
{
mark=2;
break;
}
else if(board[i][t]!=\'.\')break;
break;
}
case \'q\':
{
for(int s=i+1,t=j+1; s<8&&t<8; t++,s++)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i+1,t=j-1; s<8&&t>=0; t--,s++)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j-1; s>=0&&t>=0; t--,s--)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j+1; s>=0&&t<8; t++,s--)
{
if(board[s][t]==\'K\')
{
mark=1;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int t=i+1; t<8; t++)
if(board[t][j]==\'K\')
{
mark=1;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=i-1; t>=0; t--)
if(board[t][j]==\'K\')
{
mark=1;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=j+1; t<8; t++)
if(board[i][t]==\'K\')
{
mark=1;
break;
}
else if(board[i][t]!=\'.\')break;
for(int t=j-1; t>=0; t--)
if(board[i][t]==\'K\')
{
mark=1;
break;
}
else if(board[i][t]!=\'.\')break;
break;
}
case \'Q\':
{
for(int s=i+1,t=j+1; s<8&&t<8; t++,s++)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i+1,t=j-1; s<8&&t>=0; t--,s++)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j-1; s>=0&&t>=0; t--,s--)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int s=i-1,t=j+1; s>=0&&t<8; t++,s--)
{
if(board[s][t]==\'k\')
{
mark=2;
break;
}
else if(board[s][t]!=\'.\') break;
}
for(int t=i+1; t<8; t++)
if(board[t][j]==\'k\')
{
mark=2;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=i-1; t>=0; t--)
if(board[t][j]==\'k\')
{
mark=2;
break;
}
else if(board[t][j]!=\'.\')break;
for(int t=j+1; t<8; t++)
if(board[i][t]==\'k\')
{
mark=2;
break;
}
else if(board[i][t]!=\'.\')break;
for(int t=j-1; t>=0; t--)
if(board[i][t]==\'k\')
{
mark=2;
break;
}
else if(board[i][t]!=\'.\')break;
break;
}
case \'k\':
{
if(i+1<8)
{
if(j+1<8&&board[i+1][j+1]==\'K\')
{
mark=1;
break;
}
if(j-1>=0&&board[i+1][j-1]==\'K\')
{
mark=1;
break;
}
if(board[i+1][j]==\'K\')
{
mark=1;
break;
}
}
if(i-1>=0)
{
if(j+1<8&&board[i-1][j+1]==\'K\')
{
mark=1;
break;
}
if(j-1>=0&&board[i-1][j-1]==\'K\')
{
mark=1;
break;
}
if(board[i-1][j]==\'K\')
{
mark=1;
break;
}
}
if(j-1>=0)
{
if(board[i][j-1]==\'K\')
{
mark=1;
break;
}
}
if(j+1<8)
{
if(board[i][j+1]==\'K\')
{
mark=1;
break;
}
}
break;
}
case \'K\':
{
if(i+1<8)
{
if(j+1<8&&board[i+1][j+1]==\'k\')
{
mark=2;
break;
}
if(j-1>=0&&board[i+1][j-1]==\'k\')
{
mark=2;
break;
}
if(board[i+1][j]==\'k\')
{
mark=2;
break;
}
}
if(i-1>=0)
{
if(j+1<8&&board[i-1][j+1]==\'k\')
{
mark=2;
break;
}
if(j-1>=0&&board[i-1][j-1]==\'k\')
{
mark=2;
break;
}
if(board[i-1][j]==\'k\')
{
mark=2;
break;
}
}
if(j-1>=0)
{
if(board[i][j-1]==\'k\')
{
mark=2;
break;
}
}
if(j+1<8)
{
if(board[i][j+1]==\'k\')
{
mark=2;
break;
}
}
break;
}
}
}
if(mark) break;
}
if(mark==0)
cout<<\"Game #\"<<cnt<<\": no king is in check.\"<<endl;
else if(mark==1)
cout<<\"Game #\"<<cnt<<\": white king is in check.\"<<endl;
else if(mark==2)
cout<<\"Game #\"<<cnt<<\": black king is in check.\"<<endl;
}
return 0;
}
- uva-10196 - Check The Check
- UVa-10196-Check the Check
- UVA - 10196 - Check The Check
- UVa 10196 - Check The Check
- UVa 10196 Check the Check
- UVa 10196 - Check The Check
- UVa Problem Solution: 10196 - Check The Check
- UVa 10196 - Check The Check (模拟)
- UVA 10196 - Check The Check (将军)
- UVA 10196 Check The Check(模拟)
- 10196 - Check The Check
- UVa Problem 10196 Check the Check (将军)
- UVa Problem 10196 Check the Check (将军)
- UVaOJ 10196 - Check The Check
- uva Check The Check (模拟)
- check the check
- 110107 Check The Check
- 【OJ】1.6.7将军(Check the Check)UVa 10196 // PC 1101017 // acmclub.com 25177
- UVA 417 - Word Index
- UVA 10397 - Connect the Campus
- UVA 10048 - Audiophobia
- UVA 10369 - Arctic Network
- Codeforces Round #109 (Div. 2)
- UVA - 10196 - Check The Check
- UVA 10315 - Poker Hands
- Codeforces Round #110 (Div. 2)
- Codeforces Round #113 (Div. 2)
- Codeforces Round #114 (Div. 2)
- A*算法入门(转)
- 第三届省赛简单总结
- Codeforces Beta Round #75 (Div. 1 Only) A题
- 禅道程序员的10条原则 <转>