P1101 单词方阵
P1101 单词方阵
解题思路
对每个起点 (i, j):
对每个方向 d(共8个):
检查从 (i,j) 沿方向 d 能否拼出 "yizhong"
若能 → 将这7个格子全部标记为"保留"
最终输出:标记的格子输出原字符,未标记输出 '*'
复杂度分析
- 时间复杂度:O(n * 2)
- 空间复杂度:O(n)
代码实现
int n;
string s="yizhong";
int dx[]={-1,0,1,0,-1,-1,1,1};
int dy[]={0,1,0,-1,-1,1,1,-1};
char grid[105][105];
bool keep[105][105];
void solve() {
cin>>n;
rep(i,0,n)rep(j,0,n) cin>>grid[i][j];
rep(i,0,n){
rep(j,0,n){
rep(k,0,8){//8个方向
bool march=true;
rep(l,0,7){//7个字母
int nx=i+dx[k]*l,ny=j+dy[k]*l;
if(nx<0||nx>=n||ny<0||ny>=n||grid[nx][ny]!=s[l]){
march=false;
break;
}
}
if(march){
rep(l,0,7)keep[i+dx[k]*l][j+dy[k]*l]=true;//标记保留的字母
}
}
}
}
rep(i,0,n){
rep(j,0,n){
cout<<(keep[i][j] ? grid[i][j] : '*');
}
cout<<'\n';
}
}

浙公网安备 33010602011771号