gpt4 book ai didi

java - 查找二维中是否存在对角线、水平线或垂直线 - 一个接一个的值

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:27 25 4
gpt4 key购买 nike

所以我正在制作一个 19 x 19 的棋盘游戏。它基本上是连接 5,称为 Gomoku。

我想制定一个高效的算法来查找连续是否有 'n' 个片段。数据存储为 19x19 的二维数组。但为了便于提问,我们假设它是 6x6。

0 0 0 1 0 0      0 0 0 0 0 0
0 0 0 1 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0
0 0 0 1 0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 1

这是连续“5”个 1 的两个示例。我如何测试水平、垂直和对角线?

这是我的低效代码:

 private boolean firstDiagonalCheck(int x, int y, int num) {
int count = 1;
int check = 0;
boolean rflag = true;
boolean lflag = true;
int pos = 1;

check = turnHuman + 1;

while (rflag) {
if (x + pos >= 19 || y + pos >= 19) {
rflag = false;
break;
}
if (gb.getBoard()[x + pos][y + pos] == check) {
count++;
pos++;
} else {
rflag = false;
}
}

pos = 1;

while (lflag) {
if (x - pos < 0 || y - pos < 0) {
lflag = false;
break;
}
if (gb.getBoard()[x - pos][y - pos] == check) {
count++;
pos++;
} else {
lflag = false;
}
}

if (count == num) {
return true;
}
return false;
}

这只是第一个对角线的一种方法。还有 3 个。

如何提高效率并检查所有 4 个方向?

编辑##################

我的代码做的是:- 获取棋子的位置 (x,y)- 检查两侧(如果垂直则向上和向下)并计算一排有多少个- 如果计数匹配所需的数量,("num"),则返回 true,否则返回 false。

如果我每次都检查整个棋盘看是否有连续的棋子,会不会更有效率?

最佳答案

int count=0;
boolean Check(int x,int y)
{
int p1;
int p2;
if(elementat[x+1][y+1]==1)
{p1=1; p2=1;}
else if(elementat[x+1][y]==1)
{p1=1; p2=0;}
else. if(elementat[x+1][y-1]==1)
{p1=1; p2=-1;}
else. if(elementat[x][y-1]==1)
{p1=0;p2=-1;}
else. if(elementat[x-1][y-1]==1)
{p1=-1; p2=-1;}
else. if(elementat[x-1][y]==1)
{p1=-1; p2=0;}
else. if(elementat[x-1][y+1]==1)
{p1=-1; p2=1;}
else. if(elementat[x][y+1]==1)
{p1=0; p2=1;}

Checknext(x,y);
Checknextinv(x,y);
If(count==5) // 5 means no. of elements to form line
{return true}
else
{return false;}
}


Checknext(x,y) //19 represents the 19x19 matrix
{ if((x+p1)<=19 && (x+p1)>=0 && (y+p2)<=19 && (y+p2)>=0)
{ if(element[x+p1][y+p2]==1)
{ count++;
checknext[x+p1][y+p2];
}
}
Checknextinv(x,y)
{ if( (x+(-1*p1))<=19 && (x+(-1*p1))>=0 && (y+(-1*p2))<=19 && (y+(-1*p2))>=0))
{
if(element[x+(-1*p1)][y+(-1*p2)]==1 )
{
count++;
checknextinv[x+(-1*p1)][y+(-1*p2)];
}
}

关于java - 查找二维中是否存在对角线、水平线或垂直线 - 一个接一个的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com