题目描述
单词方阵
代码1(屎山代码)
#include<bits/stdc++.h>
using namespace std;
const int N=150;
char arr[N][N];
char ans[N][N];
int n;
bool pd_w(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x--;
if(x>=0) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_s(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x++;
if(x<=n-1) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_a(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
y--;
if(y>=0) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_d(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
y++;
if(y<=n-1) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_aw(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x--;y--;
if(x>=0 && y>=0) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_dw(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x--;y++;
if(x>=0 && y<=n-1) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_as(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x++;y--;
if(x<=n-1 && y>=0) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
bool pd_ds(int x,int y)
{
string s="y";
for(int i=1;i<=6;i++)
{
x++;y++;
if(x<=n-1 && y<=n-1) s+=arr[x][y];
else return false;
}
if(s=="yizhong") return true;
else return false;
}
void fugai(string m ,int xx ,int yy)
{
if(m=="w")
{
ans[xx][yy]='y';
ans[xx-1][yy]='i';
ans[xx-2][yy]='z';
ans[xx-3][yy]='h';
ans[xx-4][yy]='o';
ans[xx-5][yy]='n';
ans[xx-6][yy]='g';
}
if(m=="s")
{
ans[xx][yy]='y';
ans[xx+1][yy]='i';
ans[xx+2][yy]='z';
ans[xx+3][yy]='h';
ans[xx+4][yy]='o';
ans[xx+5][yy]='n';
ans[xx+6][yy]='g';
}
if(m=="a")
{
ans[xx][yy]='y';
ans[xx][yy-1]='i';
ans[xx][yy-2]='z';
ans[xx][yy-3]='h';
ans[xx][yy-4]='o';
ans[xx][yy-5]='n';
ans[xx][yy-6]='g';
}if(m=="d")
{
ans[xx][yy]='y';
ans[xx][yy+1]='i';
ans[xx][yy+2]='z';
ans[xx][yy+3]='h';
ans[xx][yy+4]='o';
ans[xx][yy+5]='n';
ans[xx][yy+6]='g';
}
if(m=="aw")
{
ans[xx][yy]='y';
ans[xx-1][yy-1]='i';
ans[xx-2][yy-2]='z';
ans[xx-3][yy-3]='h';
ans[xx-4][yy-4]='o';
ans[xx-5][yy-5]='n';
ans[xx-6][yy-6]='g';
}
if(m=="dw")
{
ans[xx][yy]='y';
ans[xx-1][yy+1]='i';
ans[xx-2][yy+2]='z';
ans[xx-3][yy+3]='h';
ans[xx-4][yy+4]='o';
ans[xx-5][yy+5]='n';
ans[xx-6][yy+6]='g';
}
if(m=="as")
{
ans[xx][yy]='y';
ans[xx+1][yy-1]='i';
ans[xx+2][yy-2]='z';
ans[xx+3][yy-3]='h';
ans[xx+4][yy-4]='o';
ans[xx+5][yy-5]='n';
ans[xx+6][yy-6]='g';
}
if(m=="ds")
{
ans[xx][yy]='y';
ans[xx+1][yy+1]='i';
ans[xx+2][yy+2]='z';
ans[xx+3][yy+3]='h';
ans[xx+4][yy+4]='o';
ans[xx+5][yy+5]='n';
ans[xx+6][yy+6]='g';
}
return;
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>arr[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ans[i][j]='*';
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(arr[i][j]!='y') continue;
if(pd_w(i,j)) fugai("w",i,j);
if(pd_s(i,j)) fugai("s",i,j);
if(pd_a(i,j)) fugai("a",i,j);
if(pd_d(i,j)) fugai("d",i,j);
if(pd_aw(i,j)) fugai("aw",i,j);
if(pd_dw(i,j)) fugai("dw",i,j);
if(pd_as(i,j)) fugai("as",i,j);
if(pd_ds(i,j)) fugai("ds",i,j);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
cout<<ans[i][j];
cout<<endl;
}
return 0;
}
优化代码(也是暴力)
#include <iostream>
#include <string>
using namespace std;
const int N = 150;
char arr[N][N];
char ans[N][N];
int n;
string target = "yizhong";
bool check(int x, int y, int dx, int dy) {
for (int i = 0; i < target.length(); i++) {
int nx = x + i * dx;
int ny = y + i * dy;
if (nx < 0 || nx >= n || ny < 0 || ny >= n || arr[nx][ny] != target[i]) {
return false;
}
}
return true;
}
void cover(int x, int y, int dx, int dy) {
for (int i = 0; i < target.length(); i++) {
int nx = x + i * dx;
int ny = y + i * dy;
ans[nx][ny] = arr[nx][ny];
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ans[i][j] = '*';
}
}
int dx[] = {-1, 1, 0, 0, -1, -1, 1, 1};
int dy[] = {0, 0, -1, 1, -1, 1, -1, 1};
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (arr[i][j] == 'y') {
for (int k = 0; k < 8; k++) {
if (check(i, j, dx[k], dy[k])) {
cover(i, j, dx[k], dy[k]);
}
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << ans[i][j];
}
cout << endl;
}
return 0;
}