• LETTERS


    深搜板子题,虽然一开始用广搜搜了半天.....(惭愧),你只要一直去搜就好了,并判重,还有如果这个字母走过那相同的字母就不能在走了,这是一个坑点....

    代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    int b[1100][1100]={0};
    char a[1100][1100];
    int n,m;
    int c[110000]={0};
    int x1[4]={1,-1,0,0};
    int y1[4]={0,0,1,-1};
    int maxn=0;
    void dfs(int x,int y,int sum)
    {
    	maxn=max(maxn,sum);//去找最大值 
    	for(int i=0;i<4;i++)
    	{
    		int x2=x+x1[i];//四个方向 
    		int y2=y+y1[i];
    		if(x2>=0&&x2<n&&y2>=0&&y2<m&&b[x2][y2]==0&&c[a[x2][y2]-'A']==0)//判断走没走过 
    		{
    			b[x2][y2]=1;
    			c[a[x2][y2]-'A']=1;
    			dfs(x2,y2,sum+1);
    			b[x2][y2]=0;//回溯 
    			c[a[x2][y2]-'A']=0;
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<m;j++)
    		{
    			cin>>a[i][j];
    		}
    	}
    	b[0][0]=1;//初始化 
    	c[a[0][0]-'A']=1;
    	dfs(0,0,1);//搜索 
    	cout<<maxn<<endl;
    }
    

      

  • 相关阅读:
    Tarjan 算法 自学整理
    POJ 2395 Out of Hay
    Codevs 1557 热浪
    Codevs 2956 排队问题
    Codevs 1005 生日礼物
    集合
    奇怪的函数
    关押罪犯
    搭积木
    大数据
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9349320.html
Copyright © 2020-2023  润新知