php五子棋胜负,C 自动判断五子棋胜负的程序

2023-10-16 05:40

本文主要是介绍php五子棋胜负,C 自动判断五子棋胜负的程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

已结贴√

问题点数:20 回复次数:7

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

C 自动判断五子棋胜负的程序

从前有一天,ly与lyon在讨论人工智能里面的好,他们提到了五子棋。

当然,这里说的五子棋是指无禁手(不知道什么是禁手的也不用管了,跟这题没关系)的五子棋:

黑先下,黑白轮流下,最先在横竖斜任一方向上形成连续的5个子(或以上)就算赢。

对此,ly和lyon都有自己的一套判断局势的算法,并且根据自己的想法各写了一个判断局况的程序。然而,他们都觉得自己的程序要比对方的优秀,所以,

他们稍作改良,做成了自动决策的对局程序,并拿出来互相pk。目前需要一个自动判断胜负的程序,即最先出现5连子的判胜。

输入格式

第1行输入两个数n和m,用空格分开,n为棋盘横纵坐标的最大值,m为步数:

1<=n<=1000,0

第2行到第m+1行为第一步到第m步的坐标,每行两个数,用空格分开:

x和y,1<=x,y<=n

输入保证不存在重复下子。

(出题人LRC)

输出格式

输出首次分出胜负那一步的序号(第一步为1),如果走完了都没有分出胜负,输出“baga”。

输入样例

5 11

3 3

2 3

2 4

4 3

4 2

3 4

1 5

3 2

5 1

1 1

1 2

输出样例

9

#include

int main(void)

{

int n,k,j,t,a1=0,b1=0,flag=0;

int m,i;

int a[1000],b[1000];

int c[1000][1000];

scanf("%d%d",&n,&m);

for(t=1;t<=n;t++)

for(j=1;j<=n;j++)

c[t][j]=0;

for(i=1;i<=m;i++)

scanf("%d%d",&a[i],&b[i]);

for(i=1;i<=m;i++)

{

if(i%2!=0)

{   a1=a[i];b1=b[i];c[a1][b1]=1;   }//黑棋置为1;

else if(i%2==0)

{   a1=a[i];b1=b[i];c[a1][b1]=2;   }//白棋置为2

//判断五子是否在横线上

if((c[a1][b1]==1&&c[a1+1][b1]==1&&c[a1+2][b1]==1&&c[a1+3][b1]==1&&c[a1+4][b1]==1)||

(c[a1][b1]==2&&c[a1+1][b1]==2&&c[a1+2][b1]==2&&c[a1+3][b1]==2&&c[a1+4][b1]==2)||

(c[a1][b1]==1&&c[a1-1][b1]==1&&c[a1+1][b1]==1&&c[a1+2][b1]==1&&c[a1+3][b1]==1)||

(c[a1][b1]==2&&c[a1-1][b1]==2&&c[a1+1][b1]==2&&c[a1+2][b1]==2&&c[a1+3][b1]==2)||

(c[a1][b1]==1&&c[a1-2][b1]==1&&c[a1-1][b1]==1&&c[a1+1][b1]==1&&c[a1+2][b1]==1)||

(c[a1][b1]==2&&c[a1-2][b1]==2&&c[a1-1][b1]==2&&c[a1+1][b1]==2&&c[a1+2][b1]==2)||

(c[a1][b1]==1&&c[a1-3][b1]==1&&c[a1-2][b1]==1&&c[a1-1][b1]==1&&c[a1+1][b1]==1)||

(c[a1][b1]==2&&c[a1-3][b1]==2&&c[a1-2][b1]==2&&c[a1-1][b1]==2&&c[a1+1][b1]==2)||

(c[a1][b1]==1&&c[a1-1][b1]==1&&c[a1-2][b1]==1&&c[a1-3][b1]==1&&c[a1-4][b1]==1)||

(c[a1][b1]==2&&c[a1-1][b1]==2&&c[a1-2][b1]==2&&c[a1-3][b1]==2&&c[a1-4][b1]==2))

{flag=1; break;}

//判断五子是否在竖线上

else if((c[a1][b1]==1&&c[a1][b1+1]==1&&c[a1][b1+2]==1&&c[a1][b1+3]==1&&c[a1][b1+4]==1)||

(c[a1][b1]==2&&c[a1][b1+1]==2&&c[a1][b1+2]==2&&c[a1][b1+3]==2&&c[a1][b1+4]==2)||

(c[a1][b1]==1&&c[a1][b1-1]==1&&c[a1][b1+1]==1&&c[a1][b1+2]==1&&c[a1][b1+3]==1)||

(c[a1][b1]==2&&c[a1][b1-1]==2&&c[a1][b1+1]==2&&c[a1][b1+2]==2&&c[a1][b1+3]==2)||

(c[a1][b1]==1&&c[a1][b1+1]==1&&c[a1][b1+2]==1&&c[a1][b1-1]==1&&c[a1][b1-2]==1)||

(c[a1][b1]==2&&c[a1][b1+1]==2&&c[a1][b1+2]==2&&c[a1][b1-1]==2&&c[a1][b1-2]==2)||

(c[a1][b1]==1&&c[a1][b1+1]==1&&c[a1][b1-1]==1&&c[a1][b1-2]==1&&c[a1][b1-3]==1)||

(c[a1][b1]==2&&c[a1][b1+1]==2&&c[a1][b1-1]==2&&c[a1][b1-2]==2&&c[a1][b1-3]==2)||

(c[a1][b1]==1&&c[a1][b1-1]==1&&c[a1][b1-2]==1&&c[a1][b1-3]==1&&c[a1][b1-4]==1)||

(c[a1][b1]==2&&c[a1][b1-1]==2&&c[a1][b1-2]==2&&c[a1][b1-3]==2&&c[a1][b1-4]==2))

{flag=1;break;}

//判断五子是否在斜线上即 \

else if((c[a1][b1]==1&&c[a1+1][b1+1]==1&&c[a1+2][b1+2]==1&&c[a1+3][b1+3]==1&&c[a1+4][b1+4]==1)||

(c[a1][b1]==2&&c[a1+1][b1+1]==2&&c[a1+2][b1+2]==2&&c[a1+3][b1+3]==2&&c[a1+4][b1+4]==2)||

(c[a1][b1]==1&&c[a1-1][b1-1]==1&&c[a1+1][b1+1]==1&&c[a1+2][b1+2]==1&&c[a1+3][b1+3]==1)||

(c[a1][b1]==2&&c[a1-1][b1-1]==2&&c[a1+1][b1+1]==2&&c[a1+2][b1+2]==2&&c[a1+3][b1+3]==2)||

(c[a1][b1]==1&&c[a1+1][b1+1]==1&&c[a1+2][b1+2]==1&&c[a1-1][b1-1]==1&&c[a1-2][b1-2]==1)||

(c[a1][b1]==2&&c[a1+1][b1+1]==2&&c[a1+2][b1+2]==2&&c[a1-1][b1-1]==2&&c[a1-2][b1-2]==2)||

(c[a1][b1]==1&&c[a1+1][b1+1]==1&&c[a1-1][b1-1]==1&&c[a1-2][b1-2]==1&&c[a1-3][b1-3]==1)||

(c[a1][b1]==2&&c[a1+1][b1+1]==2&&c[a1-1][b1-1]==2&&c[a1-2][b1-2]==2&&c[a1-3][b1-3]==2)||

(c[a1][b1]==1&&c[a1-1][b1-1]==1&&c[a1-2][b1-2]==1&&c[a1-3][b1-3]==1&&c[a1-4][b1-4]==1)||

(c[a1][b1]==2&&c[a1-1][b1-1]==2&&c[a1-2][b1-2]==2&&c[a1-3][b1-3]==2&&c[a1-4][b1-4]==2))

{flag=1;break;}

//判断五子是否在斜线上即 /

else if((c[a1][b1]==1&&c[a1+1][b1-1]==1&&c[a1+2][b1-2]==1&&c[a1+3][b1-3]==1&&c[a1+4][b1-4]==1)||

(c[a1][b1]==2&&c[a1+1][b1-1]==2&&c[a1+2][b1-2]==2&&c[a1+3][b1-3]==2&&c[a1+4][b1-4]==2)||

(c[a1][b1]==1&&c[a1-1][b1+1]==1&&c[a1+1][b1-1]==1&&c[a1+2][b1-2]==1&&c[a1+3][b1-3]==1)||

(c[a1][b1]==2&&c[a1-1][b1+1]==2&&c[a1+1][b1-1]==2&&c[a1+2][b1-2]==2&&c[a1+3][b1-3]==2)||

(c[a1][b1]==1&&c[a1+1][b1-1]==1&&c[a1+2][b1-2]==1&&c[a1-1][b1+1]==1&&c[a1-2][b1+2]==1)||

(c[a1][b1]==2&&c[a1+1][b1-1]==2&&c[a1+2][b1-2]==2&&c[a1-1][b1+1]==2&&c[a1-2][b1+2]==2)||

(c[a1][b1]==1&&c[a1+1][b1-1]==1&&c[a1-1][b1+1]==1&&c[a1-2][b1+2]==1&&c[a1-3][b1+3]==1)||

(c[a1][b1]==2&&c[a1+1][b1-1]==2&&c[a1-1][b1+1]==2&&c[a1-2][b1+2]==2&&c[a1-3][b1+3]==2)||

(c[a1][b1]==1&&c[a1-1][b1+1]==1&&c[a1-2][b1+2]==1&&c[a1-3][b1+3]==1&&c[a1-4][b1+4]==1)||

(c[a1][b1]==2&&c[a1-1][b1+1]==2&&c[a1-2][b1+2]==2&&c[a1-3][b1+3]==2&&c[a1-4][b1+4]==2))

{flag=1;break;}

}

if(flag==1)

printf("%d",i);

else printf("baga");

return 0;

}

//哪位大神能帮我看下,我拜他为师!!!为什么无法编译

[本帖最后由 公子小白2 于 2012-12-9 22:35 编辑]

搜索更多相关主题的帖子:

人工智能

这篇关于php五子棋胜负,C 自动判断五子棋胜负的程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219433

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制