围棋
来源:互联网 发布:重庆大数据培训基地 编辑:程序博客网 时间:2024/04/26 04:06
Problem Description
小tiger最近迷上了围棋。他对围棋围住对方的棋后能吃掉一大片感到很兴奋,于是整天研究轮到他走的某个局面一步最多能吃到多少棋子。不过这个围棋棋盘对小tiger来说实在太大了,为了更快地了解该怎么下棋,tiger找到了作为程序设计高手的你,帮他写一个判断吃子的程序,注意小tiger是先手执黑的。
这里简单介绍一下围棋的规则:棋盘上直线紧邻的点上如果有同色棋子存在,这些棋子就相互连接成一个不可分割的整体。直线紧邻的点上如果有异色棋子存在,此处的气便不存在。棋子如失去所有的气,就不能在棋盘上存在。如果某方下子后,对方棋子无气,或双方都呈无气状态,则应立即提取对方无气之子。
这里简单介绍一下围棋的规则:棋盘上直线紧邻的点上如果有同色棋子存在,这些棋子就相互连接成一个不可分割的整体。直线紧邻的点上如果有异色棋子存在,此处的气便不存在。棋子如失去所有的气,就不能在棋盘上存在。如果某方下子后,对方棋子无气,或双方都呈无气状态,则应立即提取对方无气之子。
Input
输入有多组数据,每组数据的第1行为两个整数n,m(1<=n<=20,1<=m<=20)代表棋盘的大小。
下面n行每行m个整数,用空格隔开,代表现有的棋盘状态,只包括0,-1,1三个整数,分别代表该点被空格,白棋或黑棋占据。
下面n行每行m个整数,用空格隔开,代表现有的棋盘状态,只包括0,-1,1三个整数,分别代表该点被空格,白棋或黑棋占据。
Output
对于每组数据输出黑棋的最多吃子数与下该棋的坐标。默认左下角为(1,1),第一个数为横向,从左向右递增,第二个数为纵向,从下往上递增(即与二维坐标系相同)。如果有多个吃子数量相同的点,则以坐标X轴小者优先,再以Y轴小者优先。如果吃不了子,则输出一行“0 0 0”。
Sample Input
3 30 1 01 -1 00 1 0
Sample Output
1 3 2
#include<iostream>#include<cstdio>using namespace std;int n,m,g,p,x1,y1,a[22][22],mov[4][2]={{1,0},{-1,0},{0,1},{0,-1}};struct input{int x,y;}s[402];void search(int ,int );int main(){//freopen("a.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){int i,j,max=0,x2,y2;for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&a[i][j]);for(i=1;i<=n;i++) for(j=1;j<=m;j++) {if(a[i][j]==-1) //找到白棋的位置 {search(i,j);if(p==1) //判断白棋周围的空格是否只有一个 {if(max<g||max==g&&y1<y2||max==g&&y1==y2&&n-x1+1<n-x2+1) //找出最优解 {max=g; x2=x1; y2=y1;}}} }if(max==0) printf("0 0 0\n"); //判断是否能吃子 else printf("%d %d %d\n",max,y2,n-x2+1);}return 0;}void search(int x,int y){int head=0,tail=1,first=1;s[1].x=x; s[1].y=y; a[x][y]=1; p=0; g=1;while(head<tail){head++;for(int i=0;i<4;i++) {x=s[head].x+mov[i][0]; y=s[head].y+mov[i][1];if(a[x][y]==0&&p<2&&x>0&&x<=n&&y>0&&y<=m)if(first) {first=0; x1=x; y1=y; p++;} //计算空格的个数及记录空格的位置 else if(x!=x1||y!=y1) p++;if(a[x][y]==-1&&x>0&&x<=n&&y>0&&y<=m){g++; tail++;s[tail].x=x; s[tail].y=y;a[x][y]=1;}x=s[head].x-mov[i][0]; y=s[head].y-mov[i][1]; }}}
0 0
- 围棋
- 围棋
- 围棋
- 围棋
- 围棋
- 围棋
- 围棋
- 围棋,又见围棋
- 围棋程序=围棋数据结构+围棋算法
- 围棋打谱
- 电脑围棋
- 围棋歌诀
- JS围棋
- 围棋往事
- 围棋入门
- 围棋1
- 围棋2
- 围棋棋盘
- 个人项目-点云处理应用-PCLStudio
- iOS 属性动画的一个分类:CABasicAnimation 基本动画(没有真正修改属性值)
- cocos2d-x基本知识点:事件处理机制之触屏事件2
- 快速找到Google可用Hosts的方法
- CAKeyFrameAnimation关键帧动画
- 围棋
- 嵌入式 iptables参数说明以及使用示例小结
- 内联函数
- 二叉平衡树 插入
- grabcut分割算法使用例程
- Derangement 问题
- Windows中 RabbitMQ安装与环境变量配置
- 初学ajax---1
- 职场人生18个哲理故事