题意:输入n,代表次数,每次输入8*8的棋盘,处理3种命令:①L:打印所有合法操作,②M:放棋子,③Q:打印棋盘然后退出。

思路:①用字符数组存棋盘,整型数组存合法位置。

②查找的方法:当前玩家为cur,遍历棋盘,发现棋子颜色为cur,就从此位置,向8个方向查找,查找到有back(对手),就置flag为1,

继续查找,查找到'-',即为合法位置,记录此位置,换方向查找。

③放棋子:和查找思路类似,修改放下的棋子后,从此位置向8个方向查找,查找到cur,cntBack++,继续查找,查找到有back,置flag为1,

只有flag=1且cntBack!=0,才代表可以修改其中的back,满足则循环修改。

 #include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define FIN freopen("input.txt","r",stdin)
#define FOUT freopen("output.txt","w",stdout)
char board[][],cur,cmd,back;
int legal[][],hasLegal,numb,numw;
int n;
void find()//查找合法位置
{
int count=,count2=;
hasLegal=;
memset(legal,,sizeof(legal));
// curnum=backnum=0;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
if(board[i][j]==cur)
{
int next[][]={{,},{,},{,-},{-,},{-,},{,},{,-},{-,-}};//右,下,左,上,右上,右下,左下,左上
int nextx=i,nexty=j;
// printf("1(%d,%d)\n",nextx+1,nexty+1);
for(int k=;k<;k++,nextx=i,nexty=j)
{
int flag=;
nextx+=next[k][];
nexty+=next[k][];
// printf("k=%d 2(%d,%d)\n",k,nextx+1,nexty+1);
if(nextx>||nextx<||nexty>||nexty<)
continue;
// printf("(%d,%d)=%c back=%c\n",nextx,nexty,board[nextx][nexty],back);
if(board[nextx][nexty]==back)
{
flag=;
// printf("flag=1\n");
}
while(flag&&board[nextx][nexty]!=cur)
{
nextx+=next[k][];
nexty+=next[k][];
// printf("3(%d,%d)=1\n",nextx+1,nexty+1);
if(nextx>||nextx<||nexty>||nexty<)
break;
if(board[nextx][nexty]=='-')
{
legal[nextx][nexty]=;
// printf("real(%d,%d)=1\n",nextx+1,nexty+1);
count++;
break;
}
}
}
}
}
}
if(count!=)
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
if(legal[i][j]!=)
{
if(count2==)
{
count2++;
}
else
printf(" ");
printf("(%d,%d)",i+,j+);
}
}
}
printf("\n");
}
else
{
printf("No legal move.\n");
hasLegal=;
}
}
void cnt()//输出棋子颜色和个数
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
if(board[i][j]=='B')
numb++;
else if(board[i][j]=='W')
numw++;
}
}
}
void change(int r,int c)//修改棋子
{
int next[][]={{,},{,},{,-},{-,},{-,},{,},{,-},{-,-}};
int nextx=r,nexty=c,cntBack,flag;
board[r][c]=cur;
// printf("change board[%d][%d]=%c\n",r+1,c+1,board[r][c]);
for(int k=;k<;k++,nextx=r,nexty=c)
{
cntBack=;
flag=;
while(board[nextx][nexty]!='-')
{
nextx+=next[k][];
nexty+=next[k][];
if(nextx<||nextx>||nexty<||nexty>)
break;
if(board[nextx][nexty]==back)
cntBack++;
if(board[nextx][nexty]==cur)
{
flag=;
break;
}
}
// printf("cntback=%d\n",cntBack);
if(cntBack!=&&flag)
{
int nexti=r,nextj=c,l;
for(l=,nexti+=next[k][],nextj+=next[k][];l<cntBack;l++,nexti+=next[k][],nextj+=next[k][])
{
// printf("board[%d][%d]",nexti+1,nextj+1);
board[nexti][nextj]=cur;
// printf("board[%d][%d]=%c\n",nexti+1,nextj+1,board[nexti][nextj]);
}
}
}
}
void print()//打印
{
for(int i=;i<;i++)
printf("%s\n",board[i]);
if(n!=)
printf("\n");//除最后一行都要输出一个空行
}
int main()
{
// FIN;
// FOUT;
char r,c,ch;
scanf("%d",&n);
while(n--)
{
for(int i=;i<;i++)
{
scanf("%s",board[i]);
}
ch=getchar();
scanf("%c",&cur);
if(cur=='W')
back='B';
else
back='W';
// memset(legal,0,sizeof(legal));//输出测试
// for(int i=0;i<8;i++)
// printf("%s\n",board[i]);
// printf("cur=%c\n",cur);
while(cmd=getchar())
{
if(cmd=='Q')
{
//打印
print();
// if(n!=0)
// printf("XXX\n");
break;
}
else if(cmd=='L')
{
// printf("input L\n");
find();
if(!hasLegal)
{
ch=cur;
cur=back;
back=ch;
}
// printf("cur=%c\n",cur);
}
else if(cmd=='M')//每次M都要统计输出
{
scanf("%c%c",&r,&c);
// printf("r=%c c=%c\n",r,c);
//修改
change(r-''-,c-''-);
numb=numw=;
cnt();
//输出统计
printf("Black -%3d White -%3d\n",numb,numw);
// print();//打印看看,记得删除
ch=cur;
cur=back;
back=ch;
}
}
}
return ;
}

UVA 220 Othello的更多相关文章

  1. 【习题 4-3 UVA - 220】Othello

    [链接] 我是链接,点我呀:) [题意] [题解] legal被我打成leagal... 然后注意输出坐标的时候,格式是%2d.. 然后就没啥难的了.. [代码] #include <bits/ ...

  2. [刷题]算法竞赛入门经典(第2版) 4-3/UVa220 - Othello

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,0 ms) //UVa 220 - Othello #include<iostream ...

  3. uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)

    题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...

  4. UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据

    题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...

  5. UVA.12169 Disgruntled Judge ( 拓展欧几里得 )

    UVA.12169 Disgruntled Judge ( 拓展欧几里得 ) 题意分析 给出T个数字,x1,x3--x2T-1.并且我们知道这x1,x2,x3,x4--x2T之间满足xi = (a * ...

  6. Fast Matrix Operations(UVA)11992

    UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...

  7. Android Weekly Notes Issue #220

    Android Weekly Issue #220 August 28th, 2016 Android Weekly Issue #220 ARTICLES & TUTORIALS Manag ...

  8. PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱?

    PIC10F200/202/204/206/220/222/320/322芯片解密程序复制多少钱? PIC10F单片机芯片解密型号: PIC10F200解密 | PIC10F202解密 | PIC10 ...

  9. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

随机推荐

  1. Burp Scanner Report

    1.使用application web 漏洞平台,除此之外还有一款类似的工具 叫做mulidata,其实mulidata功能更好一点. 2.配置之前的问题处理 安装之前要确认 自己之前是否安装过 Ap ...

  2. 判断三次URL可用性脚本

    #!/bin/bash check_url() { HTTP_CODE=$(curl -o /dev/ -s -) ];then continue fi } URL_LIST="www.ba ...

  3. 火狐浏览器无故卡死,未响应或者占大量cpu资源解决方案

    这是火狐社区的文章,对火狐浏览器无故卡死,未响应或者占大量cpu资源有详细的说明和解决,记录下!!! ++++++++++++++++++++++++++++++++ Firefox 挂起 如果您的 ...

  4. 虚拟机下安装Centos7并配置Apache+PHP+Mysql+phpmyadmin+wordpress

    一.安装Apache yum install httpd 安装成功后,Apache操作命令: systemctl start httpd //启动apache systemctl stop httpd ...

  5. 20165323 实验三 敏捷开发与XP实践

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时间:13:45 - 15:25 实验序号:实验 ...

  6. 从0开始简单使用git进行项目开发【SourceTree+Coding.net】

    一.什么是git? 含义:Git 是 Linux 发明者 Linus 开发的一款新时代的版本控制系统,相比于原来的svn系统更加简单和实用 作用: 熟悉编程的知道,我们在软件开发中源代码其实是最重要的 ...

  7. pycaffe简明文档

    pycaffe简明文档 by ChrisZZ, imzhuo@foxmail.com 2018年01月18日19:00:56 说明 caffe的python接口没有官方说明文档,例如查看一个函数的用法 ...

  8. Java链表和递归

    删除链表的指定元素: public class ListNode { public int val; public ListNode next; public ListNode(int x){ val ...

  9. MVC AOP解决JsonResult返回json时间格式

    新建JsonNetResult类:JsonResult public class JsonNetResult: JsonResult { public JsonNetResult() { Settin ...

  10. Java集合中List,Set以及Map等集合体系详解(史上最全)

    https://blog.csdn.net/zhangqunshuai/article/details/80660974