经过试验发现数组可以保证有负数的下标而不终止程序,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;
    }
} 

相关文章: