求迷宫的最短路径条数有多少条,一般方法会超时,这里记录一下模板

简要思路:用ansansans记录到每个点的条数,当新到达的点的新距离小于就旧的距离时,更新新点的ansansans;若新距离等于旧距离,也就是可能是最短路径的时候,就ans新+=ans旧ans_{新} += ans_{旧}ans新​+=ans旧​

PS:PS:PS:若新旧距离相等,则不需要再将该点加入到队列中,因为这个点已经在队列里了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const ll mod = 1000000007;
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};int r, c, edx, edy;
int dis[505][505], maze[505][505];
char mp[505][505];
ll ans[505][505];
bool vis[505][505];struct Point {int x, y, t;bool operator<(const Point & b) const {return t>b.t; }Point(){}Point(int x,int y,int t):x(x),y(y),t(t) {}
} p;void BFS() {dis[1][1] = 0;ans[1][1] = 1;priority_queue <Point> pq;pq.push(Point(1,1,0));while(!pq.empty()) {int nx, ny;//找点 Point cur = pq.top(); pq.pop();if(vis[cur.x][cur.y] == 1) continue;vis[cur.x][cur.y] = 1;for(int k=0; k<4; k++) {nx = cur.x + dx[k];ny = cur.y + dy[k];if(vis[nx][ny] == 1) continue;if(nx<1 || nx>r || ny<1 || ny>c) continue;int t = dis[cur.x][cur.y] + maze[nx][ny];if(dis[nx][ny] > t) {dis[nx][ny] = t;ans[nx][ny] = ans[cur.x][cur.y]%mod;pq.push(Point(nx, ny, dis[nx][ny]));}else if(dis[nx][ny] == t) {ans[nx][ny] += ans[cur.x][cur.y];ans[nx][ny] %= mod;//pq.push(Point(nx, ny, dis[nx][ny]));}         }}if(dis[edx][edy] == INF) printf("-1\n");else printf("%lld\n", ans[edx][edy]%mod);
} void init() {memset(vis,0,sizeof(vis));memset(ans,0,sizeof ans);memset(maze,INF,sizeof(maze));memset(dis,INF,sizeof(dis));
}int main(){int cas;scanf("%d", &cas); while(cas--) {scanf("%d%d", &r, &c); init();for(int i=1; i<=r; i++) scanf("%s", mp[i]+1);for(int i=1; i<=r; i++) for(int j=1; j<=c; j++) if(mp[i][j] == '.') maze[i][j] = 1;scanf("%d%d", &edx, &edy);BFS() ;}
}

迷宫问题 —— 最短路径条数相关推荐

  1. Algorithm:C++语言实现之队列相关算法(最短路径条数问题、拓扑排序)

    Algorithm:C++语言实现之队列相关算法(最短路径条数问题.拓扑排序) 目录 队列 1.最短路径条数问题 2.拓扑排序 队列 1.最短路径条数问题

  2. 最短路径 | 1087 三重标尺+记录最短路径条数

    这题可谓最短路的集大成.map或字符串hash的输入处理.多重标尺.最短路径条数. 但是这都是纸老虎,搞清楚逻辑和概念,所有问题迎刃而解. 代码是在宿舍写的.因为声音比较嘈杂,导致写了个很傻比的bug ...

  3. 【总结】最短路径条数问题

    例题:NOI2007 社交网络[难度不大,主要就是考察了这个知识点] 本文进过原作者同意转载,原博主为:  erosun 原地址:http://www.cnblogs.com/acxblog/p/75 ...

  4. 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)

    // algo3-11.cpp 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径) #include"c1.h" #include"func3-1.cpp" ...

  5. 【算法】机器人走迷宫破壁解法(适用于走迷宫、最短路径算法)-20200412

    标题:机器人走迷宫破壁解法(适用于走迷宫.最短路径算法)-20200412 问题描述: 一块矩形方格,含有障碍和可通行格子,求从某一点到另外一点的最短距离?N*M的矩阵: 其中,1代表障碍,0代表可通 ...

  6. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  7. 关于SQLServer和MySQL动态条数限制

    2019独角兽企业重金招聘Python工程师标准>>> SqlServer对语句的条数和参数的数量都有限制,分别是 1000 和 2100. MySql对语句的长度有限制,默认是 4 ...

  8. oracle中按指定条数批量处理的方法

    oracle中按指定条数批量处理的方法 示例 --每处理10000条提交一次 loop insert into t2 select * from t1 where rownum <= 10000 ...

  9. 去重之后统计条数_BOPET:12的普通包装膜到底去哪了?

    导语 近期BOPET市场多数客户反映,12μ的普通包装膜现货一货难求,前期订单交货紧张,新订单交期较长,12μ的普通包装膜到底去哪了呢? 对于BOPET市场来说,12μ普通包装膜交货紧.交货慢的现象从 ...

最新文章

  1. 学习Python3:20171031
  2. Excel VBA窗体上打印系统时间print now出错原因及解决方案
  3. 自学成才翁_仅因为您是自学成才,并不意味着您必须独自学习。
  4. leetcode18.4Sum
  5. 抖音运营攻略大全,新手主播必知干货丨国仁网络
  6. 计划三年投入十亿资金,统信UOS生态腾飞加速
  7. matplotlib画图并设置图片大小
  8. MOS管与三极管的区别,你务必牢记于心
  9. 重磅!清华大学首个原创虚拟美女学生,“华智冰”唱歌好听到爆
  10. 关于RSA中间人攻击
  11. uni-app修改页面背景色:
  12. html5网页中用video标签无法播放MP4视频的解决方法
  13. BICC呼叫建立过程
  14. LDK3读书笔记(第一章:LINUX内核简史)
  15. 2009年中国互联网大佬之众生相
  16. 飞猪全球游新策略:推进商家数字化升级 提升旅行体验
  17. 通过使OS X中的一切变得更大来让您大吃一惊
  18. 贾俊平统计学思维导图- 第三章 数据的图表展示
  19. mysql 查询编码转换_字符集介绍及mysql数据库编码转换
  20. 自学/培训软件测试后,找工作需要包装简历吗?

热门文章

  1. 江苏大学计算机专业学硕复试,江苏大学(专业学位)计算机技术考研难吗
  2. 如何用互联网思维卖关东煮?
  3. oracle 字符串分割函数 与 case when in 使用
  4. 程序员如何躺着把赚钱了?
  5. 普通人如何靠自媒体写作赚钱?到月入过万,只因做对了3点
  6. Linux : command
  7. tkinter 单选按钮组件Radiobutton和复选按钮组件Checkbutton
  8. 在php环境下搭建dvwa,CentOS7搭建DVWA测试环境
  9. 单键四档带433遥控调色调光台灯方案
  10. springboot项目结构