• 洛谷 P1101 单词方阵


    ## 本萌新又来发布题解了

    ## 这一题,我们用搜索染色

    ## 在此提供一简易代码:

    预处理:

    int c[10000][2],d=0;//c[10000][2]用来存 “y”出现的地址 
    int x[9]={0,1,0,1,-1,0,-1,1,-1};//八个方位 
    int y[9]={0,0,1,1,0,-1,-1,-1,1};//方便比对 
    char a[103][103],b,k[9]=" yizhong";
    bool s[102][102];//定义染色体,“0”输出“*” ,“1”正常输出 
    

    搜索函数:

    bool f(int i,int j,int m,int n,int next){//i,j为数组位置,m,n是方位 
    	if(next>=8){//next是“yizhong”的第几个字符 
    		s[i][j]=1;//比对完毕,进行染色; 
    		return 1;//返回 
    	}
    	if(a[i+m][j+n]==k[next])//如果该位置上的字符与对应字符一致,则继续 
    	    if(f(i+m,j+n,m,n,next+1)){
    	    	s[i][j]=1;//染色 
    	    	return 1;//返回上一层
    		}
    	return 0;//不一致,则结束 
    

    输入:

    int n,i,j,o;
    	cin>>n;
    	for(i=1;i<=n;i++){
    	    for(j=1;j<=n;j++){
    			cin>>b;
    			a[i][j]=b;//输入字符 
    			if(b=='y'){
    				c[++d][0]=i;//记录“y”的位置 
    				c[d][1]=j;//d为“y”的个数 
    			}
    		}
    	}
    

    全方位搜索:

    while(d){
    		i=c[d][0];
    		j=c[d][1];
    		for(o=1;o<=8;o++){//全方位递归搜索 
    		   if(a[i+x[o]][j+y[o]]=='i')
    		     if(f(i+x[o],j+y[o],x[o],y[o],3))
    		         s[i][j]=1;
    		}
    		d--;
    

    输出:

    for(i=1;i<=n;i++){
    		for(j=1;j<=n;j++){
    			if(s[i][j])//染了色,便正常输出 
    			cout<<a[i][j];
    			else cout<<"*";//否则输出“*” 
    		}
    		cout<<endl;
    	}
    

    你们最爱的完整代码:

    #include<iostream>
    using namespace std;
    int c[10000][2],d=0,x[9]={0,1,0,1,-1,0,-1,1,-1};
    int                 y[9]={0,0,1,1,0,-1,-1,-1,1};
    char a[103][103],b,k[9]=" yizhong";
    bool s[102][102];
    bool f(int i,int j,int m,int n,int next){
        if(next>=8){
            s[i][j]=1;
            return 1;
        }
        if(a[i+m][j+n]==k[next])
            if(f(i+m,j+n,m,n,next+1)){
            	s[i][j]=1;
            	return 1;
            }
        return 0;
    }
    int main(){
        int n,i,j,o;
        cin>>n;
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                cin>>b;
                if(b=='y'){
                    c[++d][0]=i;
                    c[d][1]=j;
                }
                a[i][j]=b;
            }
        }
        while(d){
            i=c[d][0];
            j=c[d][1];
            for(o=1;o<=8;o++){
               if(a[i+x[o]][j+y[o]]=='i')
                  if(f(i+x[o],j+y[o],x[o],y[o],3))
                     s[i][j]=1;
            }
            d--;
        }
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                if(s[i][j])cout<<a[i][j];
                else cout<<"*";
            }
            cout<<endl;
        }
        return 0;
    }
    

    码字挺不容易,大家点个赞再走吧0/。

    ✐☎博主撰文不易,转载还请注明出处;若对本文有疑,请私信或在下方讨论中提出。O(∩_∩)O谢谢!☏

    ☃〔尽管小伙伴们肯定有千百种方式针对,但博主还是极其非常十分不要脸的把反对键吃掉辣!〕☃

    ✿『$At$ $last$:非常一(hu)本(shuo)正(ba)经(dao)的:博主很笨,请不要欺负他』✿✍

  • 相关阅读:
    Codeforces Round #720 (Div. 2) B. Nastia and a Good Array(被坑好几次)1300
    B. Lord of the Values 思维数学建构 附加 英文翻译
    几个i的幂的累加公式1^2+2^2+3^2 2~5
    Codeforces Round #721 (Div. 2)A. And Then There Were K(位运算,二进制) B1. Palindrome Game (easy version)(博弈论)
    洛谷 P2392 kkksc03考前临时抱佛脚, dp / 深搜
    Codeforces Round #719 (Div. 3) C. Not Adjacent Matrix
    Educational Codeforces Round 108 (Div. 2), C map套vector存储
    Day39---->MySQL系列
    Day38——>MySQL
    Day37
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/9879287.html
Copyright © 2020-2023  润新知