X - The Game POJ - 1970

题目翻译:

一个由19位的19人组成的玩家,由两名玩家组成。一个玩家使用黑石头,另一个玩家使用白石。游戏开始于一个空白的棋盘,两个玩家交替放置黑石头和白石。黑色总是先走。板上有19条水平线和19条垂直线,石头放在线路的交点处。

水平线从上到下标记为1,2,...,19,垂直线从左到右标记为1,2,...,19。


这个游戏的目标是沿着水平,垂直或对角线连续地放置相同颜色的五个石头。所以黑色在上图中赢了。但是,如果超过五颗相同颜色的石头连续投放,玩家就不会赢得比赛。

给定一个游戏的配置,写一个程序,以确定白色是赢得还是黑色赢了,还没有人赢了。黑色和白色都不会同时获胜的输入数据。也不会有白色或黑色在多个地方获胜的输入数据。
输入
输入的第一行包含单个整数t(1 <= t <= 11),测试用例数,后跟每个测试用例的输入数据。每个测试用例由19行组成,每行有19个数字。黑色石头由1表示,白色石头由2表示,0表示无石头。
输出
每个测试用例应该有一行或两行。在测试用例输出的第一行中,如果黑色获胜,则应打印1,如果为白色,则应打印2,如果没有人赢,则应打印为0。如果黑色或白色获胜,请在第二行打印五个连续石块中最左边石头的水平线数和垂直线数。 (如果连续五个石头垂直放置,请选择最上面的石头。)

Sample Input

1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 2 0 0 2 2 2 1 0 0 0 0 0 0 0 0 0 0
0 0 1 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Sample Output

1
3 2


代码如下:


/*
解释1,2,3层判断:
如果在“if(m==5)”判断没有通遍历会绕过该判断接着下一次遍历,
直到i=19;而这种情况不是黑子白子都出现五子就是都没赢,
所以3进行了判断(if(i<19)),而1和2是为了跳出到3;
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
//输入数据,数组初始化;
int grid[21][21]={0};
//四个方向的坐标:dir[0][0]=0,dir[0][1]=1,dir[1][0]=1,dir[1][1]=0...;
int dir[4][2]={{0,1},{1,0},{1,1},{-1,1}};

int main(){
int t,m,i,j,k,x,y;
m=0;
scanf("%d",&t);
while(t--){
//输入数据;
for(i=1;i<=19;++i){
for(j=1;j<=19;j++)
scanf("%d",&grid[i][j]);
}
//对输入数据进行遍历;
for(i=1;i<=19;++i){
for(j=1;j<=19;++j){
//如果该位置为零跳过;
if(grid[i][j]==0) continue;
for(k=0;k<=3;++k){
//判断该位置是否与左,上,左上,左下相等,以此来防止出现六子相连的情况;
x=i-dir[k][0];//对应值:0,1,1,-1;
y=j-dir[k][1];//对应值:1,0,1,1;
//如果出现相等的情况就跳过,因为在该遍历方法下可能会出现六子相连的情况;
if(grid[i][j]==grid[x][y]) continue;
//如果在与该方向相反的方向上没有与该位置相等,则遍历该方向上的五个子;
else{
//将x和y赋值为改为值的坐标,作为方向的起点;
x=i,y=j;
//依次判断该方向上的五个点是否和起点相等;
for(m=1;m<=4;++m){
x+=dir[k][0];
y+=dir[k][1];
//如果不相等就跳出,判断下一个方向;
if(grid[i][j]!=grid[x][y]) break;
}
//判断该方向上的地六个子是否也和起点相等;
//必须判断m是否等于5,因为此次循环的起始点不一定为该方向上的最顶端点;
if(m==5){
x+=dir[k][0];y+=dir[k][1];
//如果相等接着判断下一个方向,说明出现了六子相连的情况;
if(grid[i][j]==grid[x][y]) continue;
//如果不相等,说明没有六子相连,跳出该位置的四个方向的判断;
else break;
}
}

}
//1,方向层判断;
if(k<=3) break;
}
//2,列层判断;
if(j<=19) break;
}
//3.行层判断;
if(i<19){
cout<<grid[i][j]<<endl;
cout<<i<<" "<<j<<endl;
}
else cout<<"0"<<endl;
}
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4S店客户管理小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示 社会的发展和科学技术的进步,互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。手机具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。 本文从管理员、用户的功能要求出发,4S店客户管理系统中的功能模块主要是实现管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理,用户客户端:首页、车展、新闻头条、我的。门店客户端:首页、车展、新闻头条、我的经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与4S店客户管理系统实现的实际需求相结合,讨论了微信开发者技术与后台结合java语言和MySQL数据库开发4S店客户管理系统的使用。 关键字:4S店客户管理系统小程序 微信开发者 Java技术 MySQL数据库 软件的功能: 1、开发实现4S店客户管理系统的整个系统程序; 2、管理员服务端;首页、个人中心、用户管理、门店管理、车展管理、汽车品牌管理、新闻头条管理、预约试驾管理、我的收藏管理、系统管理等。 3、用户客户端:首页、车展、新闻头条、我的 4、门店客户端:首页、车展、新闻头条、我的等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流信息的查看及回复相应操作。
现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本微信小程序医院挂号预约系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此微信小程序医院挂号预约系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。微信小程序医院挂号预约系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,医生信息管理,医院信息管理,科室信息管理,预约信息管理,预约取消管理,留言板,系统管理。微信小程序用户可以注册登录,查看医院信息,查看医生信息,查看公告资讯,在科室信息里面进行预约,也可以取消预约。微信小程序医院挂号预约系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值