经过试验发现数组可以保证有负数的下标而不终止程序,string不能忍受,所以在最开始的时候用string就会出现负数的下标
代码 (算法借鉴)
#include <bits/stdc++.h>
using namespace std;
int bk[110][110];
char st[110][110];
int dir[][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
char yz[]="yizhong";
struct node
{
int x,y;
}p[110];
void dfs(int x,int y,int id,int k)
{
if(id==7)
{
for(int i=0;i<7;i++)
bk[p[i].x][p[i].y]=1;
}
else
{
int xx=x+dir[k][0];
int yy=y+dir[k][1];
if(id==6||st[xx][yy]==yz[id+1])
{
p[id].x=x;p[id].y=y;
dfs(xx,yy,id+1,k);
}
}
}
main()
{
//freopen("data.in","r",stdin);
int n;
cin>>n;
for(int i=0;i<n;i++)
cin>>st[i];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(st[i][j]=='y')
{
for(int k=0;k<8;k++)
{
int x=i+dir[k][0];
int y=j+dir[k][1];
if(st[x][y]=='i')
dfs(i,j,0,k);
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(bk[i][j])
cout<<st[i][j];
else
cout<<"*";
}
cout<<endl;
}
}