[Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)

时间:2022-09-20 15:54:46

题目链接:http://acm.swust.edu.cn/problem/409/

Time limit(ms): 1000        Memory limit(kb): 65535
 
Description
小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间。小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路。请帮助小鼠a找出所有通向小鼠b的最短道路。

[Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)

编程任务: 
对于给定的小鼠的迷宫,编程计算小鼠a通向小鼠b的所有最短道路。

 
Input
第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数,1 < n,m < 100。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示小鼠a所处的方格(p,q)和小鼠b所处的方格(r,s)。
 
Output
将计算出的小鼠a通向小鼠b的最短路长度和有多少条不同的最短路输出。第一行是最短路长度。第2行是不同的最短路数。 
如果小鼠a无法通向小鼠b则输出“No Solution!”。
 
Sample Input
8 8 3
3 3
4 5
6 6
2 1
7 7
Sample Output
11
96
 
解题思路:在最短路径的基础上还要求路径条数,那么自然而然的想到了记忆化搜索Orz~~~
 
代码如下:
 #include <iostream>
#include <queue>
#include <cstring>
#define maxn 101
using namespace std;
typedef long long LL;
struct node{
int sx, sy;
node(int x, int y) :sx(x), sy(y){};
node(){};
};
int n, m, k, mpt[maxn][maxn], vis[maxn][maxn], dis[][] = { , , -, , , -, , };
LL dp[maxn][maxn];
//dp[i][j]代表路径条数,mpt[i][j]最短路程的值
int BFS(int sx, int sy, int ex, int ey){
dp[sx][sy] = ;//初始情况1条路径
vis[sx][sy] = ;
node start(sx, sy);
queue<node>Q;
Q.push(start);
while (!Q.empty()){
node now = Q.front();
Q.pop();
if (now.sx == ex && now.sy == ey)//找到终点,返回最短路径
return mpt[now.sx][now.sy];
for (int i = ; i < ; i++){
int x = now.sx + dis[i][];
int y = now.sy + dis[i][];
if (x >= && x <= n && y >= && y <= m && mpt[x][y] != -){
if (!vis[x][y]){
vis[x][y] = ;
mpt[x][y] = mpt[now.sx][now.sy] + ;//最短路程加1
dp[x][y] = dp[now.sx][now.sy];//直接赋值
node next(x, y);
Q.push(next);
}
else
dp[x][y] += dp[now.sx][now.sy];
}
}
}
return -;
}
int main(){
int x, y, sx, sy, ex, ey;
while (cin >> n >> m >> k){
memset(mpt, , sizeof(mpt));
memset(dp, , sizeof(dp));
memset(vis, , sizeof(vis));
for (int i = ; i < k; i++){
cin >> x >> y;
mpt[x][y] = -;//标记为障碍物
}
cin >> sx >> sy >> ex >> ey;
int ans = BFS(sx, sy, ex, ey);
if (ans == -)
cout << "No Solution!" << endl;
else
cout << mpt[ex][ey] << endl << dp[ex][ey] << endl;
}
return ;
}

[Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)的更多相关文章

  1. FZU 2092 收集水晶 bfs&plus;记忆化搜索 or 暴力

    题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...

  2. HDU 4444 Walk &lpar;离散化建图&plus;BFS&plus;记忆化搜索&rpar; 绝对经典

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...

  3. FZU 2092 bfs&plus;记忆化搜索

    晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...

  4. luogu1514 &lbrack;NOIp2010&rsqb;引水入城 &lpar;bfs&plus;记忆化搜索&rpar;

    我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...

  5. 【BZOJ 1415】 1415&colon; &lbrack;Noi2005&rsqb;聪聪和可可 (bfs&plus;记忆化搜索&plus;期望)

    1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1640  Solved: 962 Description I ...

  6. csu 最优对称路径&lpar;bfs&plus;记忆化搜索&rpar;

    1106: 最优对称路径 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 371  Solved: 77[Submit][Status][Web Boar ...

  7. BZOJ&period;2246&period;&lbrack;SDOI2011&rsqb;迷宫探险&lpar;DP 记忆化搜索 概率&rpar;

    题目链接 求最大的存活概率,DP+记忆化. 用f[s][x][y][hp]表示在s状态,(x,y)点,血量为hp时的存活概率. s是个三进制数,记录每个陷阱无害/有害/未知. 转移时比较容易,主要是在 ...

  8. BZOJ2246 &lbrack;SDOI2011&rsqb;迷宫探险 【记忆化搜索dp &plus; 概率】

    题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...

  9. light oj 1011 - Marriage Ceremonies &lpar;状态压缩&plus;记忆化搜索&rpar;

    题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的), ...

随机推荐

  1. Pairs Forming LCM&lpar;素因子分解&rpar;

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

  2. 无网络centos7中部署kubernetes

    本文提供的kubernetes1.1实际为kubernetes0.8,最新kubernetes部署方式见下一篇文章:centos下kubernetes+flannel部署. 一.部署环境信息: 1)m ...

  3. 在Android中动画移动一个View的位置,采用Scroller类实现Android动画之 View移动

    在Android中动画移动一个View的位置,采用Scroller类实现 今天说最近自己遇到的一个问题,就是要用动画效果来移动一个VIew的位置. 这个具体的情况是,需要做一个SlidingMenu的 ...

  4. Android应用程序所包含的四种组件和DDMS

    关注用户组件         Activity                               编辑文本 .玩游戏 后台进程               Service           ...

  5. Nginx 基本配置和日志分析

    最近在维护的一个项目,路由转发规则都统一通过Nginx转发,所以再次参考部分博文和书本,熟悉Nginx的基本配置,还有一个重点也是日志的分析 Nginx 常用模块是server块,location块. ...

  6. Neuron:Neural activities in V1 create a bottom-up saliency map

    Neural activities in V1 create a bottom-up saliency map 本文证明了人类的初级视皮层可以在视觉信息加工的非常早期阶段,生成视觉显著图,用以引导空间 ...

  7. GithubPages &plus; Hexo &plus; Disqus博客教程

    文章主要描述了利用github page,hexo静态博客框架以及disqus来搭建个人静态博客的详细步骤. github page用来搭建博客的主页,hexo用来更改博客主题.发布文章等等,并通过配 ...

  8. eclipse提交到git

    前言 今天是我正式加入GitHub的第一天,作为世界上最大的同性交友社区,以push和pull出名的它,让我坠入其中并无法自拔,废话不多说,上教程: 步骤一 首先,你需要注册一个github账号,相信 ...

  9. android AsyncTask异步任务&lpar;笔记)

    AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...

  10. ID的故事

    随心所欲.这个时代比较中二吧,刚出国,也买了房,年纪轻轻的觉得自己好像很牛B的样子. 失败悲观的路人甲.大约是13年的时候,突遭重击,一下子悲观失望,死的心都有.为此买了那种自杀也会给赔偿的保险(买后 ...