题解 P1101 【单词方阵】
很水的一道题。
如果dfs不会的话,完完全全可以打表的嘛(说的我好像会dfs似的)!
思路:
就是把不是‘y’,‘i’,‘z’,‘h’,‘o’,‘n’,‘g’这七个字符的字符标记0,等一下输出的时候输出‘’。 然后再去看字符,先找到‘y’,可以从八个方向枚举一下,看是不是‘yizhong’,如果是的话就标记1,等下输出的时候不输出‘’。 代码实现:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
/*
1,5 2,5 3,5
1,4 2,4 3,4
1,3 2,3 3,3
1,2 2,2 2,2
1,1 2,1 3,1
*/
int n;
char ch[101][101];
bool a[101][101];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) {
cin>>ch[i][j];//不是y i z h o n g的标记
if(ch[i][j]=='a' || ch[i][j]=='b' || ch[i][j]=='c' || ch[i][j]=='d' || ch[i][j]=='e' || ch[i][j]=='f' || ch[i][j]=='j' || ch[i][j]=='k' || ch[i][j]=='l' || ch[i][j]=='m' || ch[i][j]=='p' || ch[i][j]=='q' || ch[i][j]=='r' || ch[i][j]=='s' || ch[i][j]=='t' || ch[i][j]=='u' || ch[i][j]=='v'|| ch[i][j]=='w' || ch[i][j]=='x')
a[i][j]=0;
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) { //分别八个方向打表模拟
if(ch[i][j]=='y') {
if(ch[i][j+1]=='i')// 0 1
if(ch[i][j+2]=='z')
if(ch[i][j+3]=='h')
if(ch[i][j+4]=='o')
if(ch[i][j+5]=='n')
if(ch[i][j+6]=='g')
for(int k=0;k<=6;k++)
a[i][j+k]=1;
if(ch[i+1][j]=='i')// 1 0
if(ch[i+2][j]=='z')
if(ch[i+3][j]=='h')
if(ch[i+4][j]=='o')
if(ch[i+5][j]=='n')
if(ch[i+6][j]=='g')
for(int k=0;k<=6;k++)
a[i+k][j]=1;
if(ch[i][j-1]=='i')// 0 -1
if(ch[i][j-2]=='z')
if(ch[i][j-3]=='h')
if(ch[i][j-4]=='o')
if(ch[i][j-5]=='n')
if(ch[i][j-6]=='g')
for(int k=0;k<=6;k++)
a[i][j-k]=1;
if(ch[i+1][j+1]=='i')// 1 1
if(ch[i+2][j+2]=='z')
if(ch[i+3][j+3]=='h')
if(ch[i+4][j+4]=='o')
if(ch[i+5][j+5]=='n')
if(ch[i+6][j+6]=='g')
for(int k=0;k<=6;k++)
a[i+k][j+k]=1;
if(ch[i-1][j-1]=='i')// -1 -1
if(ch[i-2][j-2]=='z')
if(ch[i-3][j-3]=='h')
if(ch[i-4][j-4]=='o')
if(ch[i-5][j-5]=='n')
if(ch[i-6][j-6]=='g')
for(int k=0;k<=6;k++)
a[i-k][j-k]=1;
if(ch[i-1][j+1]=='i')// -1 1
if(ch[i-2][j+2]=='z')
if(ch[i-3][j+3]=='h')
if(ch[i-4][j+4]=='o')
if(ch[i-5][j+5]=='n')
if(ch[i-6][j+6]=='g')
for(int k=0;k<=6;k++)
a[i-k][j+k]=1;
if(ch[i-1][j]=='i')// -1 0
if(ch[i-2][j]=='z')
if(ch[i-3][j]=='h')
if(ch[i-4][j]=='o')
if(ch[i-5][j]=='n')
if(ch[i-6][j]=='g')
for(int k=0;k<=6;k++)
a[i-k][j]=1;
if(ch[i+1][j-1]=='i')// 1 -1
if(ch[i+2][j-2]=='z')
if(ch[i+3][j-3]=='h')
if(ch[i+4][j-4]=='o')
if(ch[i+5][j-5]=='n')
if(ch[i+6][j-6]=='g')
for(int k=0;k<=6;k++)
a[i+k][j-k]=1;
}
}
}
for(int i=1;i<=n;i++) {//输出
for(int j=1;j<=n;j++) {
if(a[i][j]==0)
printf("*");
else
printf("%c",ch[i][j]);
}
printf("\n");
}
return 0;
}