题目链接: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的最短道路。

编程任务: 
对于给定的小鼠的迷宫,编程计算小鼠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+记忆化搜索 or 暴力

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

  2. HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典

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

  3. FZU 2092 bfs+记忆化搜索

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

  4. luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)

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

  5. 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)

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

  6. csu 最优对称路径(bfs+记忆化搜索)

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

  7. BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)

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

  8. BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】

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

  9. light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)

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

随机推荐

  1. 浅析指针(pointer)与引用(reference)

    在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...

  2. python-操作exel(xlrd,xlwt)

    1.使用第三方库 python中处理excel表格,常用的库有xlrd(读excel)表.xlwt(写excel)表.openpyxl(可读写excel表)等. xlrd读数据较大的excel表时效率 ...

  3. org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the CDATA sectio

    偶尔有一次beyond compare比较部署文件时,发现有一个JSP文件结尾的地方有一大堆空白的二进制符号,当时没有管,就覆盖上去了. =================背景分割线========= ...

  4. iOS深入学习 (Block全面分析)

    本文翻译自苹果的文档,有删减,也有添加自己的理解部分. 如果有Block语法不懂的,可以参考fuckingblocksyntax,里面对于Block 为了方便对比,下面的代码我假设是写在ViewCon ...

  5. openstack之neutron linuxbridge + vlan组网

    linuxbridge是和linuxbridge plugin匹配的core agent,主要实现L2层的功能和security group的功能.security group的功能逐渐会被neutr ...

  6. Oralce Exp 与 Imp 的使用方法

    1.完全:EXP  SYSTEM/SYSTEM@ORCL  FILE=C:\FULL.DMP  LOG=C:\FULL.DMP.LOG  FULL=Y  BUFFER=819200如果要执行完全导出, ...

  7. Windows窗口消息大全(转)

    Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...

  8. html object元素

    知道object是播放音频,但是想了解具体点,百度一下,感觉模模糊糊的,感觉看不大明白,最后找到一个解释比较详细,先从应用,到解释具体属性, 具体网址是: http://www.w3school.co ...

  9. Garbage

    垃圾回收 http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/ http://blog.jobbole ...

  10. QT中静态库的生成与使用——创建共享库代码,附例子

    一. 静态库的生成    1. 测试目录: lib    2. 源码文件名: mywindow.h, mywindow.cpp, 类MyWindow继承于QPushButton, 并将文字设置为&qu ...