Poj2157Maze 搜索

用一个5进制数来位压钥匙的状态,然后 判重就好了。 这题写戳了,反正是问能不能到,直接bfs 搜,打开一扇门在把它加入队列继续搜,看最后能不能搜到结果。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>

using namespace std;

int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};

int cifang(int a,int b)
{
    int ans  =1 ;
    for(int i =0;i<b;i++)
        ans*= a;
    return ans;
}

int flag;
int ex,ey;
char str[100][100];
int n,m;
int val[10];
int vis[20][20][4000];
void dfs(int x,int y,int sum)
{
    if(vis[x][y][sum]) return ;
   // printf("%d %d %d\n",x,y,sum);system("pause");
    if(flag) return ;
    if(x==ex&&y==ey){
        flag = 1;return ;
    }
    vis[x][y][sum]=1;
    for(int i = 0;i<4;i++){
        int xx = dx[i]+ x;int yy= dy[i] +y;
        if(flag) return ;
        if(xx>=0&&xx<n&&yy>=0&&yy<m&&str[xx][yy]!=‘X‘){
            if(str[xx][yy]>=‘A‘&&str[xx][yy]<=‘E‘){
                int t =str[xx][yy] - ‘A‘;
                int gg = sum % cifang(5,t+1) / cifang(5,t);
                if(gg==val[t]){
                    dfs(xx,yy,sum);
                }
            }
            else
            if(str[xx][yy]>=‘a‘&&str[xx][yy]<=‘e‘){
                int t=str[xx][yy]-‘a‘;
                int gg = sum+cifang(5,t);
                char t1 = str[xx][yy];
                str[xx][yy]=‘.‘;
                dfs(xx,yy,gg);
                str[xx][yy] = t1;
            }
            else dfs(xx,yy,sum);
        }
    }
}

int main()
{
    int sx,sy;
    while(cin>>n>>m,n||m){
        flag = 0;
        memset(vis,0,sizeof(vis));
        memset(val,0,sizeof(val));
        for(int i  =0 ;i<n;i++){
                scanf("%s",str[i]);
                for(int j = 0;j<m;j++){
                if(str[i][j]>=‘a‘&&str[i][j]<=‘e‘){
                    val[str[i][j]-‘a‘]++;
                }
                if(str[i][j]==‘S‘){
                    sx = i;sy = j;
                }
                if(str[i][j] == ‘G‘){
                    ex = i ;ey = j;
                }
                }
        }
        dfs(sx,sy,0);
        if(flag){
            printf("YES\n");
        }
        else printf("NO\n");
    }
    return 0;
}
时间: 2024-10-10 22:04:52

Poj2157Maze 搜索的相关文章

Android零基础入门第62节:搜索框组件SearchView

原文:Android零基础入门第62节:搜索框组件SearchView 一.SearchView概述 SearchView是搜索框组件,它可以让用户在文本框内输入文字,并允许通过监听器监控用户输入,当用户输入完成后提交搜索时,也可通过监听器执行实际的搜索. SearchView默认是展示一个search的icon,点击icon展开搜索框,也可以自己设定图标.用SearchView时可指定如下表所示的常见XML属性及相关方法. 如果为SearchView增加一个配套的ListView,则可以为Se

Android----- 改变图标原有颜色 和 搜索框

本博客主要讲以下两点知识点 图标改变颜色:Drawable的变色,让Android也能有iOS那么方便的图片色调转换,就像同一个图标,但是有多个地方使用,并且颜色不一样,就可以用这个方法了. 搜索框: 一般是EditText实现,本文 实现 TextView图片和文字居中,键盘搜索. 来看看效果图: 图标改变颜色:第一个界面的左边(二维码)和右边(更多)两个实现,我放进去的图片是黑色的,显示出来是白色的. 搜索框:第一个界面的图片和文字居中,还可以设置间距,第二个见面搜索设置键盘搜索按钮,点击搜

移动端 input 获取焦点后弹出带enter(类似于搜索,确定,前往)键盘,以及隐藏系统键盘

一:调出系统带回车键的键盘 在项目中经常有输入框,当输入完成后点击确定执行相应的动作.但是有些设计没有确定或者搜索按钮,这就需要调用系统键盘,点击系统键盘的确定后执行相应动作. 但是单纯的input是无法实现的,要想调出带回车的键盘必须把input放在form表单里面才可以,并且得加上action(一定要加),下面是个简单的例子. <form action class="search" onsubmit="return false;"> <i cl

HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加字符的个数. 题解1(LCS): 很神奇的做法. 先求s和s的反串的LCS,也就是原串中已经满足回文性质的字符个数. 然后要变成回文串的话,只需要为剩下的每个落单的字符,相应地插入一个和它相同的字符即可. 所以答案是:s.size()-LCS(s,rev(s)) 另外,求LCS时只会用到lcs[i-

Linux下的搜索命令grep(转)

一.简介 grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 通常grep会结合管道|来使用,比如把上一个命令得到的结果通过管道|传递到grep进行筛选 二.选项 -a 不要忽略二进制数据. -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容. -b 在显示符合范本样式的那一行之外,并

poj 1088 滑雪 DP(dfs的记忆化搜索)

题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 求最大的下滑路径 分析:因为只能从高峰滑到低峰,无后效性,所以每个点都可以找到自己的最长下滑距离(只与自己高度有关).记忆每个点的最长下滑距离,当有另一个点的下滑路径遇到这个点的时候,直接加上这个点的最长下滑距离. dp递推式是,dp[x][y] = max(dp[x][y],dp[x+1][y]+

hash算法搜索获得api函数地址的实现

我们一般要获得一个函数的地址,通常采用的是明文,例如定义一个api函数字符串"MessageBoxA",然后在GetProcAddress函数中一个字节一个字节进行比较.这样弊端很多,例如如果我们定义一个杀毒软件比较敏感的api函数字符串,那么可能就会增加杀毒软件对我们的程序的判定值,而且定义这些字符串还有一个弊端是占用的字节数较大.我们想想如何我们的api函数字符串通过算法将它定义成一个4字节的值,然后在GetProcAddress中把AddressOfNames表中的每个地址指向的

模糊查询(类似百度搜索框)

很常见的搜索框,很常用,总结一下,怕自己忘了,使用的是原生的js. 这是原生写的,代码很简单,重要是思路.主要就是用了一个indexOf(),很简单.越简单的东西越难想到,很多人都会想到用正则去做,这样就舍近求远了. html部分: <div id="box"> <input type="text" id="txt" value = ""> <input type="button&quo

Elasticsearch查询期间的即时搜索(Query-time Search-as-you-type)

现在让我们来看看前缀匹配能够如何帮助全文搜索.用户已经习惯于在完成输入之前就看到搜索结果了 - 这被称为即时搜索(Instant Search, 或者Search-as-you-type).这不仅让用户能够在更短的时间内看到搜索结果,也能够引导他们得到真实存在于我们的索引中的结果. 比如,如果用户输入了johnnie walker bl,我们会在用户输入完成前显示Johnnie Walker Black Label和Johnnie Walker Blue Label相关的结果. 和往常一样,有多