【发布时间】:2018-12-24 19:22:34
【问题描述】:
问题出在这里:B. 8 Queens, Again!!
我认为我没有遇到最坏的情况或遗漏什么。我的提交在测试 2 中失败。
我刚刚检查了每个输入的行、列和对角线及其下一个输入。我认为这就足够了。是否还有其他情况可以有效或无效?不过我不确定我的代码是否正确。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, y[9], x[9], i, j, valid;
scanf("%d", &t);
while(t--)
{
valid = 1;
for(i = 0; i < 8; i++)
{
scanf(" %c %d", &x[i], &y[i]);
}
for(i = 0; i < 8; i++)
{
for(j = i+1; j < 8; j++)
{
if(x[i] == x[j] || y[i] == y[j] || abs(x[i] - x[j]) == abs(y[i]-y[j])) valid = 0;
}
}
(valid) ? printf("Valid\n") : printf("Invalid\n");
}
return 0;
}
【问题讨论】:
-
尝试打印坐标。您的
scanf可能正在读取换行符。我总是使用fgets只是为了去掉行尾的换行符。