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;
        }
    
    }
  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7458993.html
Copyright © 2011-2022 走看看