| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:求五子棋算法,谢谢,帮帮我。
只看楼主 加入收藏
ZaneZaneZane
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-4-22
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
求五子棋算法,谢谢,帮帮我。
问题 E: 五子棋
题目描述


五子棋的游戏规则很简单,当一方产生横向、竖向或斜向的连续5个棋子时,就获胜。给出一个棋局的状态,请你判断哪方获胜。


输入要求


先输入一个整数n,表示有n组测试数据。

每组测试数据的第一行为一个整数m(5<=m<=20),表示棋盘的大小为m*m。

此后一个有m行,每行m个字符,'0'表示黑棋,'1'表示白棋,'*'空格。


输出要求


根据每组测试数据,判断哪方获胜。如果黑棋获胜,输出"black win";如果白棋获胜,输出"white win";如果双方都未获胜,输出"neither"。


假如输入
3
5
00000
1****
1****
1****
11***
6
000011
1***10
1**1*0
1*1**0
11***0
00****
5
0***1
*0*1*
0***1
*1*0*
1***0
应当输出
black win
white win
neither
搜索更多相关主题的帖子: neither 五子棋 black white 游戏 
2015-06-04 23:35
ZaneZaneZane
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-4-22
收藏
得分:0 
回复 2楼 边小白
我去看看先,谢谢咯
2015-06-05 18:16
ZaneZaneZane
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-4-22
收藏
得分:0 
#include <stdio.h>
int main()
{
    int n,i,m,j,k;
    char a[20][20];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&m);
        for(j=0;j<m;j++)
        {
            for(k=0;k<m;k++)
            {
                    scanf("%d",&a[j][k]);
            }
        }
        for(j=0;j<m;j++)
        {
            if((a[j][k]==a[j+1][k])&&(a[j+1][k]==a[j+2][k])&&(a[j+2][k]==a[j+3][k])&&(a[j+3][k]==a[j+4][k]))
            {
                if(a[j][k]==0)
                    printf("black win\n");
                else if(a[j][k]==1)
                    printf("white win\n");
                else
                    printf("neither\n");
            }
            else if((a[j][k]==a[j][k+1])&&(a[j][k+1]==a[j][k+2])&&(a[j][k+2]==a[j][k+3])&&(a[j][k+3]==a[j][k+4]))
            {
                if(a[j][k]==0)
                    printf("black win\n");
                else if(a[j][k]==1)
                    printf("white win\n");
                else
                    printf("neither\n");
            }
            else if((a[j][k]==a[j+1][k+1])&&(a[j+1][k+1]==a[j+2][k+2])&&(a[j+2][k+2]==a[j+3][k+3])&&(a[j+3][k+3]==a[j+4][k+4]))
            {
                if(a[j][k]==0)
                    printf("black win\n");
                else if(a[j][k]==1)
                    printf("white win\n");
                else
                    printf("neither\n");
            }
            else if((a[j][k]==a[j+1][k-1])&&(a[j+1][k-1]==a[j+2][k-2])&&(a[j+2][k-2]==a[j+3][k-3])&&(a[j+3][k-3]==a[j+4][k-4]))
            {
                if(a[j][k]==0)
                    printf("black win\n");
                else if(a[j][k]==1)
                    printf("white win\n");
                else
                    printf("neither\n");
            }
        }
    }
    return 0;
}


求大神帮我看看错哪了?
2015-06-05 18:24
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:4 
试试 深度优先搜索,百度 八皇后问题

我就是真命天子,顺我者生,逆我者死!
2015-06-06 20:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
回复 4楼 ZaneZaneZane
判断条件中数组访问溢出了。注意判断是否到达了棋盘边上。

重剑无锋,大巧不工
2015-06-06 22:23
快速回复:求五子棋算法,谢谢,帮帮我。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036257 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved