FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS)

2024-09-04 08:32

本文主要是介绍FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

解题报告

http://blog.csdn.net/juncoder/article/details/38146041

题目传送门

题意

求最短路和最短路的路数。

思路:

BFS+DFS,先求出最短路。在DFS搜等于最短路的条数。

不加优化SDUTOJ过了,数据就是水。

确定了最短路的长度,加上奇偶剪枝FOJ也过了。

#include <queue>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int mmap[1000][1000],vis[1000][1000],n,m,k,cnt,q,p,r,minstep,s;
struct node {int x,y,step;
};
int dx[]= {-1,0,1,0};
int dy[]= {0,1,0,-1};
int bfs()
{queue<node>Q;node next,now;now.x=p;now.y=q;now.step=0;vis[p][q]=1;Q.push(now);while(!Q.empty()) {now=Q.front();Q.pop();if(now.x==r&&now.y==s) {return now.step;}for(int i=0; i<4; i++) {next.x=now.x+dx[i];next.y=now.y+dy[i];if(next.x>=1&&next.x<=n&&next.y>=1&&next.y<=m&&!mmap[next.x][next.y]&&!vis[next.x][next.y]) {next.step=now.step+1;Q.push(next);vis[next.x][next.y]=1;}}}
}
void dfs(int b,int e,int step)
{if(b==r&&e==s&&minstep==step) {cnt++;return ;}//if(step>minstep)return ;没优化if(abs(b-r)+abs(e-s)+step>minstep)return ;for(int i=0; i<4; i++) {int x=b+dx[i];int y=e+dy[i];if(x>=1&&x<=n&&y>=1&&y<=m&&!mmap[x][y]&&!vis[x][y]) {// printf("%d %d\n",x,y);vis[x][y]=1;dfs(x,y,step+1);vis[x][y]=0;}}
}
int main()
{int i,j,x,y;while(~scanf("%d%d%d",&n,&m,&k)) {cnt=0;memset(mmap,0,sizeof(mmap));memset(vis,0,sizeof(vis));for(i=0; i<k; i++) {scanf("%d%d",&x,&y);mmap[x][y]=1;}scanf("%d%d",&p,&q);scanf("%d%d",&r,&s);minstep=bfs();printf("%d\n",minstep);memset(vis,0,sizeof(vis));dfs(p,q,0);vis[p][q]=1;printf("%d\n",cnt);}
}

 1205 小鼠迷宫问题

Accept: 535    Submit: 1729
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

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

小鼠的迷宫

编程任务

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

 Input

本题有多组输入数据,你必须处理到EOF为止。
每组数据的第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示小鼠a所处的方格(p,q)和小鼠b所处的方格(r,s)。(1≤p,r≤n; 1≤q,s≤m)

结果输出

 Output

对于每组数据,将计算出的小鼠a通向小鼠b的最短路长度和有多少条不同的最短路输出。每组数据输出两行,第一行是最短路长度;第2行是不同的最短路数。每组输出之间没有空行。
如果小鼠a无法通向小鼠b则输出“No Solution!”。

 Sample Input

8 8 33 34 56 62 17 7

 Sample Output

1196

 Source

FJOI2005


这篇关于FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135511

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例