#include<stdio.h>
#include<string.h>
#include<math.h>
int mark[9][9];
void init()
{
int i, j;
for (i = 0;i < 9;i++)
{
for (j = 0;j < 9;j++)
mark[i][j] = 0;
}
}
void eight(int x, int y)
{
int i, j;
for (i = 1;i <= 8;i++)
{
mark[i][y] = 1;
mark[x][i] = 1;
}
for (i = 1;i <= 8;i++)
for (j = 1;j <= 8;j++)
if (abs(i - x) == abs(j - y)) mark[i][j]=1;
}
int main() {
char str[10];
while (scanf("%s", str) != EOF)
{
init();
int i,j,s;
int len = strlen(str);
for (i = 0;i < len;i++)
{
if (str[i] > '0'&&str[i] <= '9')
{
eight(i + 1, str[i] - '0');
}
else s = i+1;
}
//下面打印的这一段仅是为了测试
for (i = 1;i <= 8;i++)
{
for (j = 1;j <= 8;j++)
printf("%d ", mark[i][j]);
printf("\n");
}
for (i = 1;i <= 8;i++)
{
if (mark[s][i] == 0)
{
printf("%d\n", i);
break;
}
}if (i == 9) printf("No answer\n");
}
return 0;
}
1.设一个矩阵保存是否标记
2.对角线的标记看
对应下标差的绝对值是否相等