zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }
  • 相关阅读:
    bootstrap媒体查询
    Qt用Zip压缩文件夹的一些坑
    QCanvasItem介绍-QT3
    C盘无损扩容
    ArcGis连接oracle失败:ORA-6413:连接未打开
    通过ArcMap发布服务
    windows系统下使用cd命令
    C语言运算符优先级
    c/c++ 指针
    c++数组易错点总结
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7458993.html
Copyright © 2011-2022 走看看