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

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g