求问洛谷的P1101
给一n×n 的字母方阵,内可能蕴含多个 yizhong 单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用 * 代替,以突出显示单词。
输入:
8
qyizhong
gydthkjy
nwidghji
orbzsfgz
hhgrhwth
zzzzzozo
iwdfrgng
yyyygggg
输出:
*yizhong
gy******
n*i*****
o**z****
h***h***
z****o**
i*****n*
y******g
为什么这个代码不行啊?实例测试正常,但一到提交就全红的,过不了
#include<stdio.h>
int x[8] = { 0,1,0,-1,1,1,-1,-1 };
int y[8] = { 1,0,-1,0,1,-1,1,-1 };
char in[100][100] = { 0 };
int ou[100][100] = { 0 };
char out[10000][2] = { 0 };//记录x,y坐标位置
char ex[8] = "yizhong";
int color(int i,int x1,int y1)//判断,i哪一个方向,x1,y1是开头坐标
{
for (int k = 0; k < 7; k++)
{
if (in[x1][y1] != ex[k])
{
return 0;
}
else
{
x1 += x[i];
y1 += y[i];
}
}
return 1;
}
int main()
{
int d = 1;
int n;
scanf("%d\n", &n);
for (int i = 0; i < n; i++)//行
{
for (int j = 0; j < n; j++)//列
{
scanf("%c", &in[i][j]);
if (in[i][j] == ex[0])
{
out[d][0] = i;
out[d][1] = j;
d++;
}
}
getchar();
}
while (d)
{
int i = out[d][0];
int j = out[d--][1];
int x1 = i;
int y1 = j;
for (int k = 0; k < 8; k++)
{
if (color(k, i, j))
{
for (int l = 0; l < 7; l++)
{
ou[x1][y1] = 1;
x1 += x[k];
y1 += y[k];
}
}
}
}
for (int i = 0; i < n; i++)//输出
{
for (int j = 0; j < n; j++)
{
if (ou[i][j] == 1)
printf("%c", in[i][j]);
else
printf("*");
}
if(i!=n-1)
printf("\n");
}
}