luogu p1101 单词方阵

https://www.luogu.org/problem/show?pid=1101

 

很恶心的代码  就是八个方向都搜索

 

#include<bits/stdc++.h>
using namespace std;
int n;
char s[120][120],t[120][120];//一个是刚开始的 一个是结束的
char nex[] = {'y','i','z','h','o','n','g'};

int dfs(int x,int y,int k,int d)
{
    if(k == 6 && s[x][y] =='g')
    {
        //puts("yes");
        if(d == 1 )  {
            for(int i=0;i<=6;i++)
                t[x][y-i] = nex [6-i];
        }
        if(d == 2 ) {
            for(int i=0;i<=6;i++){
                t[x][y+i] = nex[6-i];
            }
        }
        if(d==3 ){
            for(int i=0;i<=6;i++)
                t[x-i][y] = nex[6-i];
        }
        if(d==4 ){
            for(int i=0;i<=6;i++)
                t[x+i][y] = nex[6-i];
        }
        if(d==5 ){
            for(int i=0;i<=6;i++)
                t[x-i][y-i] = nex[6-i];
        }
        if(d==6 ){
            for(int i=0;i<=6;i++)
                t[x+i][y+i] = nex[6-i];
        }
        if(d==7){
            for(int i=0;i<=6;i++)
                t[x-i][y+i] = nex[6-i];
        }
        if(d==8){
            for(int i=0;i<=6;i++)
                t[x+i][y-i] = nex[6-i];
        }
        return 0;
    }
    if(d== 1 && y+1 <= n&&s[x][y+1] == nex[k+1]  ) //往右
        dfs(x,y+1,k+1,d);

    if(d== 2 && y-1 >=1 && s[x][y-1] == nex[k+1]) //往左
        dfs(x,y-1,k+1,d);

    if(d==3 && x+1 <= n && s[x+1][y] == nex[k+1])//往下
        dfs(x+1,y,k+1,d);

    if(d==4 && x-1>=1 && s[x-1][y]==nex[k+1])//往上
        dfs(x-1,y,k+1,d);

    if(d==5 && x+1<=n && y+1<=n && s[x+1][y+1]==nex[k+1])//斜下
        dfs(x+1,y+1,k+1,d);

    if(d==6 && x-1>=1 && y-1>=1 && s[x-1][y-1]==nex[k+1])//斜上
        dfs(x-1,y-1,k+1,d);

    if(d==7 && x+1<=n && y-1>=1 && s[x+1][y-1]==nex[k+1])//左斜下
        dfs(x+1,y-1,k+1,d);

    if(d==8 && x-1>=1 && y+1<=n && s[x-1][y+1]==nex[k+1])
        dfs(x-1,y+1,k+1,d);
}


int main ()
{

    cin >> n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>s[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            t[i][j] = '*';
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(s[i][j] == 'y')
            {
                for(int d=1;d<=8;d++)
                {
                    dfs(i,j,0,d);
                }
            }

        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            cout<< t[i][j];
        cout<<endl;
    }

}

 

posted @ 2017-08-31 16:32  Draymonder  阅读(162)  评论(0编辑  收藏  举报