样例2作参考,但是单个试验后只能成功显示横向的,组合起来是RE(明明也已经判断越界了)求看问题!
#include<bits/stdc++.h>
using namespace std;
char a[110][110];
bool vis[110][110];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
//暴力枚举
for(int i=1;i<=n;i++)//横向往右
for(int j=1;j<=n;j++)
{
string tmp="";
for(int k=0;k<7;k++)//横向往右存字符串
{
if(j+k<=n)//没有越界
tmp+=a[i][j+k];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0;k<7;k++)
vis[i][j+k]=1;
}
tmp="";
for(int k=0;k>-7;k--)//横向往左边存字符串
{
if(1<=j+k)//没有越界
tmp+=a[i][j+k];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0;k>-7;k++)
vis[i][j+k]=1;
}
tmp="";
for(int k=0;k<7;k--)//竖向向往下边存字符串
{
if(i+k<=n)//没有越界
tmp+=a[i+k][j];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0;k<7;k++)
vis[i+k][j]=1;
}
tmp="";
for(int k=0;k>-7;k--)//竖向往上边存字符串
{
if(1<=i+k)//没有越界
tmp+=a[i+k][j];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0;k>-7;k++)
vis[i+k][j]=1;
}
tmp="";
for(int k=0;k<7;k++)//往右下边存字符串
{
if(i+k<=n&&j+k<=n)//没有越界
tmp+=a[i+k][j+k];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0;k<7;k++)
vis[i+k][j+k]=1;
}
tmp="";
for(int k=0,m=0;k>-7,m<7;k--,m++)//往右上边存字符串
{
if(1<=i+k && j+m<=n)//没有越界
tmp+=a[i+k][j+m];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0,m=0;k>-7,m<7;k--,m++)
vis[i+k][j+m]=1;
}
tmp="";
for(int k=0,m=0;k>-7,m>-7;k--,m--)//往左上边存字符串
{
if(1<=i+k && 1<=j+m)//没有越界
tmp+=a[i+k][j+m];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0,m=0;k>-7,m>-7;k--,m--)
vis[i+k][j+m]=1;
}
tmp="";
for(int k=0,m=0;k<7,m>-7;k++,m--)//往左下边存字符串
{
if(i+k<=n && 1<=j+m)//没有越界
tmp+=a[i+k][j+m];
//else break;
}
if(tmp=="yizhong")
{
for(int k=0,m=0;k<7,m>-7;k++,m--)
vis[i+k][j+m]=1;
}
tmp="";
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(vis[i][j]) cout<<a[i][j];
else cout<<'*';
cout<<endl;
}
return 0;
}