Poj 4001 Hdu 4121 Xiangqi
来源:互联网 发布:bilibili是什么软件 编辑:程序博客网 时间:2024/05/16 04:27
这题是道模拟题,题意很简单,现在黑棋只有一个“将”,红棋可能有“帅”,“车”,“炮”,“马”,走棋方式和我们平常下棋一样,现在是黑棋走,问黑棋是否能走到安全的位置上去,解题思路就是判断黑棋能走的四个方向是否安全,对车,炮,马分别判断,代码如下:
#include<stdio.h>int dir[4][2]={0,1,1,0,0,-1,-1,0};//四个方向int dir2[8][2]={1,2,2,1,-1,2,-2,1,2,-1,1,-2,-1,-2,-2,-1};//马能走的四个方向int dir3[8][2]={1,1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1};//如果对应的地方有棋子,则马无法走char map[20][20];//标志棋盘bool inpal(int x,int y)//判断将是否在九宫格中{if(x>3 || x<1 || y<4 || y>6)return false;return true;}bool isIn(int x,int y)//判断棋子是否在棋盘中{if(x<1 || x>10 || y<1 || y>9)return false;return true;}bool isR(int x,int y,int dir[])//如果向一个方向一直走遇到的第一个棋子是车或者帅,则这个位置不安全{while(1){x=x+dir[0];y=y+dir[1];if(!isIn(x,y))break;if(map[x][y]=='R' || map[x][y]=='G')return false;if(map[x][y]!='0')return true;}return true;}bool isC(int x,int y,int dir[])//如果向一个方向一直走遇到的第二个是炮,则这个位置不安全{int c=0;while(1){x=x+dir[0];y=y+dir[1];if(!isIn(x,y))break;if(map[x][y]=='C' && c==1)return false;if(map[x][y]!='0')c++;}return true;}bool isH(int x,int y)//如果马能走到这个位置而且不别马腿,则这个位置不安全{int i;for(i=0;i<8;i++)if(isIn(x+dir2[i][0],y+dir2[i][1]) && map[x+dir2[i][0]][y+dir2[i][1]]=='H' && map[x+dir3[i][0]][y+dir3[i][1]]=='0')return false;return true;}bool isOk(int x,int y)//判断一个位置安不安全{int i;for(i=0;i<4;i++)if(!isR(x,y,dir[i]) || !isC(x,y,dir[i]))return false;if(!isH(x,y))return false;return true;}bool all(int x,int y)//判断将周围四个位置是否有安全的{int i;for(i=0;i<4;i++)if(inpal(x+dir[i][0],y+dir[i][1]) && isOk(x+dir[i][0],y+dir[i][1]))return true;return false;}int main(){char ch[5];int gen[2],i,j,n,x,y;while(scanf("%d %d %d",&n,&gen[0],&gen[1]) && gen[0]){for(i=0;i<20;i++)for(j=0;j<20;j++)map[i][j]='0';for(i=0;i<n;i++){scanf("%s %d %d",ch,&x,&y);map[x][y]=ch[0];}if(all(gen[0],gen[1]))printf("NO\n");elseprintf("YES\n");}return 0;}
- Poj 4001 Hdu 4121 Xiangqi
- POJ Xiangqi 4001 && HDOJ 4121 Xiangqi
- poj 4001 Xiangqi
- hdu 4121 Xiangqi
- HDU 4121 Xiangqi
- HDU 4121 Xiangqi --模拟
- HDU-4121 Xiangqi 模拟
- HDU 4121 Xiangqi 模拟
- HDU 4121 Xiangqi
- HDU 4121 Xiangqi
- ACM篇:POJ 4001 -- Xiangqi
- hdu 4121 Xiangqi(模拟)
- hdu 4121 Xiangqi 大模拟
- hdu4121/poj 4001 Xiangqi(模拟)
- HDU 4121 Xiangqi (算是模拟吧)
- HDU 4121 Xiangqi 模拟题(水
- Xiangqi
- poj 4001 Xiangqi 模拟 顺带关于模拟的一番吐槽
- 简评黑客利器——中国菜刀
- Actionscript 3.0 的应用程序域 ApplicationDomain
- C++中IO流
- strcpy函数常见面试题目
- 配置处理结果---struts2学习笔记
- Poj 4001 Hdu 4121 Xiangqi
- 使用PureMVC需要注意的九个地方
- 判断点是否在多边型内
- AS3 setTimeOut、setInterval、Timer 的区别和用法
- 解决Content-Type :application/x-www-form-urlencoded 老是request.getInputStream()取不到值的问题
- C# 串口
- 异常处理及convention---struts2学习笔记
- AS3 正则表达式详解
- Struct与Char*转换问题