该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码
#include
#define right 'r'
#define lower 'l'
#define lower_right 'i'
#define lower_left 'e'
#define none 'o'
int table[19][19];
int hit_space(int x, int y, char vec)
{
if (vec == right)
{
if (x - 1 >= 0 && table[x - 1][y] == 0)
return 1;
if (x &#43; 4 <19 && table[x &#43; 4][y] &#61;&#61; 0)
return 1;
}
if (vec &#61;&#61; lower)
{
if (y - 1 >&#61; 0 && table[x][y - 1] &#61;&#61; 0)
return 1;
if (y &#43; 4 <19 && table[x][y &#43; 4] &#61;&#61; 0)
return 1;
}
if (vec &#61;&#61; lower_right)
{
if (x - 1 >&#61; 0 && y - 1 >&#61; 0 && table[x - 1][y - 1] &#61;&#61; 0)
return 1;
if (x &#43; 4 <19 && y &#43; 4 <19 && table[x &#43; 4][y &#43; 4] &#61;&#61; 0)
return 1;
}
if (vec &#61;&#61; lower_left)
{
if (x - 1 >&#61; 0 && y &#43; 1 <19 && table[x - 1][y &#43; 1] &#61;&#61; 0)
return 1;
if (x &#43; 4 <19 && y - 4 >&#61; 0 && table[x &#43; 4][y - 4] &#61;&#61; 0)
return 1;
}
return 0;
}
int tetra_colinear_on_vec(int x, int y, char vec)
{
if (vec &#61;&#61; right)
{
if (x &#43; 3 <19
&& table[x][y] &#61;&#61; table[x &#43; 1][y]
&& table[x &#43; 1][y] &#61;&#61; table[x &#43; 2][y]
&& table[x &#43; 2][y] &#61;&#61; table[x &#43; 3][y])
return 1;
}
if (vec &#61;&#61; lower)
{
if (y &#43; 3 <19
&& table[x][y] &#61;&#61; table[x][y &#43; 1]
&& table[x][y &#43; 1] &#61;&#61; table[x][y &#43; 2]
&& table[x][y &#43; 2] &#61;&#61; table[x][y &#43; 3])
return 1;
}
if (vec &#61;&#61; lower_right)
{
if (x &#43; 3 <19 && y &#43; 3 <19
&& table[x][y] &#61;&#61; table[x &#43; 1][y &#43; 1]
&& table[x &#43; 1][y &#43; 1] &#61;&#61; table[x &#43; 2][y &#43; 2]
&& table[x &#43; 2][y &#43; 2] &#61;&#61; table[x &#43; 3][y &#43; 3])
return 1;
}
if (vec &#61;&#61; lower_left)
{
if (x &#43; 3 <19 && y - 3 >&#61; 0
&& table[x][y] &#61;&#61; table[x &#43; 1][y - 1]
&& table[x &#43; 1][y - 1] &#61;&#61; table[x &#43; 2][y - 2]
&& table[x &#43; 2][y - 2] &#61;&#61; table[x &#43; 3][y - 3])
return 1;
}
return 0;
}
char tetra_colinear(int x, int y)
{
char vec;
vec &#61; right;
if (tetra_colinear_on_vec(x, y, vec))
return vec;
vec &#61; lower;
if (tetra_colinear_on_vec(x, y, vec))
return vec;
vec &#61; lower_right;
if (tetra_colinear_on_vec(x, y, vec))
return vec;
vec &#61; lower_left;
if (tetra_colinear_on_vec(x, y, vec))
return vec;
return none;
}
int checkmate()
{
int i, j;
for (i &#61; 0; i <19; i&#43;&#43;)
for (j &#61; 0; j <19; j&#43;&#43;)
{
if (table[i][j] &#61;&#61; 1)
{
char vec &#61; tetra_colinear(i, j);
if (vec &#61;&#61; right || vec &#61;&#61; lower || vec &#61;&#61; lower_right||vec&#61;&#61;lower_left)
{
if (hit_space(i, j, vec))
{
printf("1:%d,%d\n", i&#43;1, j&#43;1);
return 1;
}
}
}
}
for (i &#61; 0; i <19; i&#43;&#43;)
for (j &#61; 0; j <19; j&#43;&#43;)
{
if (table[i][j] &#61;&#61; 2)
{
char vec &#61; tetra_colinear(i, j);
if (vec &#61;&#61; right || vec &#61;&#61; lower || vec &#61;&#61; lower_right || vec &#61;&#61; lower_left)
{
if (hit_space(i, j, vec))
{
printf("2:%d,%d\n", i&#43;1, j&#43;1);
return 1;
}
}
}
}
return 0;
}
int main()
{
int i,j;
for (i &#61; 0; i <19; i&#43;&#43;)
for (j &#61; 0; j <19; j&#43;&#43;)
scanf("%d",&table[i][j]);
if (!checkmate())
printf("No\n");
return 0;
}