[Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)
题目链接:http://acm.swust.edu.cn/problem/409/
编程任务:
对于给定的小鼠的迷宫,编程计算小鼠a通向小鼠b的所有最短道路。
如果小鼠a无法通向小鼠b则输出“No Solution!”。
8 8 3
3 3
4 5
6 6
2 1
7 7
|
11
96
|
#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+记忆化搜索)的更多相关文章
- FZU 2092 收集水晶 bfs+记忆化搜索 or 暴力
题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...
- HDU 4444 Walk (离散化建图+BFS+记忆化搜索) 绝对经典
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4444 题意:给你一些n个矩形,给你一个起点,一个终点,要你求从起点到终点最少需要转多少个弯 题解:因为 ...
- FZU 2092 bfs+记忆化搜索
晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...
- luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
我们先bfs一下看看是否能到最底下的所有点 如果不能的话,直接把不能到的那几个数一数就行了 如果能的话: 可以发现(并不可以)某格能到达的最底下的格子一定是一个连续的区间 (因为如果不连续的话,我们先 ...
- 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
1415: [Noi2005]聪聪和可可 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1640 Solved: 962 Description I ...
- csu 最优对称路径(bfs+记忆化搜索)
1106: 最优对称路径 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 371 Solved: 77[Submit][Status][Web Boar ...
- BZOJ.2246.[SDOI2011]迷宫探险(DP 记忆化搜索 概率)
题目链接 求最大的存活概率,DP+记忆化. 用f[s][x][y][hp]表示在s状态,(x,y)点,血量为hp时的存活概率. s是个三进制数,记录每个陷阱无害/有害/未知. 转移时比较容易,主要是在 ...
- BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】
题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...
- light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的), ...
随机推荐
- nautilus-open-terminal右键随处打开终端
Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件 nautilus-open-terminal-0.17-4.el6.x86_64 是一个让你随处都可以打开终 ...
- 【翻译】在Ext JS 5种使用ViewControllers
原文:Using ViewControllers in Ext JS 5 简单介绍 在Ext JS 5中,在应用程序架构方面提供了一些令人兴奋的改进,如加入了ViewModels.MVVM以及view ...
- 一个SQL update语句
须要每隔一段时间选取最老的商户更新时间戳: update DP_Shop set DP_Shop.LastDate = now() where DP_Shop.ShopId in (select Sh ...
- C#时间格式之GMT时间的格式
GMT:格林尼标准时间 北京时间=GMT时间+8小时 DataTime nowDate = DataTime.Now; nowDate.toString("r"); 效果为 ...
- JavaSE思维导图(八)
- SQL知识三(Day 27)
大家好,好几天都没写博客了.因为自己的一些原因,落下了很多.今天没有学什么新的知识,自己就把以前落下的好好看了一下.好了,今天就先总结一下SQL剩下的一些知识吧. 主要学的知识有:循环语句(case语 ...
- objective-C学习笔记(一)OBJC简介
如何掌握一门高级编程语言:(这里特指Objective-C) 底层思维: 向下,如何从机器底层的角度来思考程序运行的过程. 关注语言构造.编译转换.内存模型.运行时机制 抽象思维: 向上,当软 ...
- Unity5UGUI 官方教程学习笔记(一)Canvas
Canvas Canvas是控制一组UI元素将被渲染 所有的UI元素必须是Canvas下的子物体 一个场景中可以拥有多个Canvas 在创建UI元素时,如果没有Canvas,将会自动创建Canvas ...
- 星际SC 地图 Big Game Fort 要塞之战 修正了 BIG GAME 地图的平衡性
星际SC 地图 Big Game Fort 要塞之战 修正了 BIG GAME 地图的平衡性 也适合BIG 1V1 对战 此版本目前不开放1打1造功能
- C语言与管道
int main() { int s; int n; float avg; scanf("%d,%d",&s,&n); //特别注意的地方 // scanf(&qu ...