P1101 单词方阵

无脑暴搜

const int N=110;
char g[N][N];
bool vis[N][N];
int n;
string str="yizhong";

bool check(int x,int y)
{
    return x>=0 && x<n && y>=0 && y<n;
}

void dfs(int x,int y,string s,int dir)
{
    if(x ==n || y == n) return;

    if(s == str)
    {
        for(int i=0;i<str.size();i++)
        {
            int a=x-dx8[dir]*i,b=y-dy8[dir]*i;
            vis[a][b]=true;
        }
        return;
    }

    if(g[x][y] == 'y')
    {
        for(int i=0;i<8;i++)
        {
            int a=x+dx8[i],b=y+dy8[i];
            if(!check(a,b)) continue;
            string t="y";
            if(t+g[a][b] != str.substr(0,2)) continue;
            dfs(a,b,t+g[a][b],i);
        }
    }
    else
    {
        int a=x+dx8[dir],b=y+dy8[dir];
        if(!check(a,b)) return;
        if(s+g[a][b] != str.substr(0,s.size()+1)) return;
        dfs(a,b,s+g[a][b],dir);

    }
}

int main()
{
    cin>>n;

    for(int i=0;i<n;i++) scanf("%s",&g[i]);

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            dfs(i,j,"",-1);

    for(int i=0;i<n;i++,cout<<endl)
        for(int j=0;j<n;j++)
        {
            if(!vis[i][j])
                g[i][j]='*';
            cout<<g[i][j];
        }

    //system("pause");
}
原文地址:https://www.cnblogs.com/fxh0707/p/13694696.html