• HDU1035深度搜索


    /*
    	HDU1035
    	意甲冠军:
    	给定一个字符矩阵,N S W E分别代表向上,下,剩下,进 
    	模拟搜索,推断:
    	若能走出字符矩阵。则Yes,输出步数 
    	若走不出矩阵,那么必然有圈存在,必然在矩阵中存在一个点会訪问第二次
    */
     
    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    #include <math.h>
    #include <set>
    #include <vector>
    #include <string>
    #include <cstring>
    #include <sstream>
    using namespace std;
    
    #define input freopen("input.txt","r",stdin)
    #define output freopen("output.txt","w",stdout)
    #define For1(i,a,b) for (i=a;i<b;i++)
    #define For2(i,a,b) for (i=a;i<=b;i++)
    #define Dec(i,a,b) for (i=a;i>b;i--)
    #define Dec2(i,a,b) for (i=a;i>=b;i--)
    #define Sca_d(x) scanf("%d",&x)
    #define Sca_s(x) scanf("%s",x)
    #define Sca_c(x) scanf("%c",&x)
    #define Sca_f(x) scanf("%f",&x)
    #define Sca_lf(x) scanf("%lf",&x)
    #define Fill(x,a) memset(x,a,sizeof(x))
    #define MAXN 1110
    #define MAXM 1110
    #define MAXINT 111111
    
    template <typename T>
    T gcd(T a,T b)
    {
        return b==0?a:gcd(b,a%b);  
    }
    
    template <typename T>  
    T lcm(T a,T b)  
    {  
        return a/gcd(a,b)*b;  
    }
    
    char dir_ch[5]={' ','W','S','E','N'};
    int dir_x[5]={0,0,1,0,-1};
    int dir_y[5]={0,-1,0,1,0};
    //三个常量数组模拟上下左右的字母行动
    
    char map[MAXN][MAXM];
    int dist[MAXN][MAXM];
    char ch[MAXM];
    int m,n,enter;
    
    void dfs(int x,int y)
    {
    	int newx,newy,k;
    	For2(k,1,4)
    		if (map[x][y]==dir_ch[k])//等于哪个方向。就往那个方向走 
    		{
    			newx=x+dir_x[k];
    			newy=y+dir_y[k];
    			if (newx<1||newx>n||newy>m||newy<1)//假设跑出了地图之外,则已经出了矩阵 
    			{
    				printf("%d step(s) to exit
    ",dist[x][y]);
    				return;
    			}
    			if (!dist[newx][newy])
    			{
    				dist[newx][newy]=dist[x][y]+1;//没到目标继续搜索 
    				dfs(newx,newy);
    			}
    			else
    			{
    				printf("%d step(s) before a loop of %d step(s)
    ",
    					dist[newx][newy]-1,dist[x][y]+1-dist[newx][newy]);
    				//假设当前产生的子节点之前已经訪问过
    				//那么。必然在原图之中产生了环。

    //当中,环的长度为 dist[x][y]+1-dist[newx][newy] //从 dist[newx][newy]-1 步后開始出现环 return; } } return; } int main() { //input; int i,j,k; while(cin>>n>>m>>enter) { if (!n&&!m) break; Fill(dist,0); For2(i,1,n) { Sca_s(ch); For2(j,1,m) map[i][j]=ch[j-1]; } dist[1][enter]=1; dfs(1,enter); } return 0; } /* 附:在问题的例子Input 3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 */



  • 相关阅读:
    nginx负载均衡代理配置脚本
    想查看下编译安装的nginx默认都带有哪些模块
    docker安装mysql8.0.18
    Reached target Basic System
    layer iframe的一些操作记录:
    微信JSAPI支付
    用go和python实现在图片里藏图片
    go反射优化
    go图片灰度化
    golang 创建发送邮件服务
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5047403.html
Copyright © 2020-2023  润新知