Problem 1205 小鼠迷宫问题

Accept: 522    Submit: 1679 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 3 3 3 4 5 6 6 2 1 7 7

Sample Output

11 96

Source

FJOI2005

 
利用bfs可以计算出最短路径的距离len(即移动次数),然后用dfs计算出等于len(移动次数)时有多少种不同的最短路径。
 #include<stdio.h>
#include<string.h>
int sx[]={,,,-};
int sy[]={,,-,};
int map[][];
int mark[][];
int n,m;
int x1,y1,x2,y2;
int min_step,sum_min;
int que[][];
int que_step[];
void bfs(int h,int l)
{ int front,rear;
front=rear=;
que[rear][]=h;
que[rear][]=l;
rear++;
map[h][l]=;
que_step[front]=;
int xx,yy,i; while(front<rear)
{
for(i=;i<;i++)
{
xx=que[front][]+sx[i];
yy=que[front][]+sy[i]; if(xx==x2&&yy==y2)
{
min_step=que_step[front]+;
return;
}
if(map[xx][yy]==&&xx<=n&&xx>=&&yy>=&&yy<=m)
{
//printf("(%d %d) step=%d\n",xx,yy,que_step[front]+1);
que[rear][]=xx;
que[rear][]=yy;
que_step[rear]=que_step[front]+;
rear++;
map[xx][yy]=; }
}
front++;
}
}
int t;
void dfs(int x,int y,int c_step)
{
//printf("%d\n",c_step);
if(x==x2&&y==y2&&c_step==min_step)
{ sum_min++; return ;
}
if((x>x2?x-x2:x2-x)+(y>y2?y-y2:y2-y)+c_step>min_step) return ;
int i;
for(i=;i<;i++)
{
int xx,yy;
xx=x+sx[i];
yy=y+sy[i];
if(xx>=&&xx<=n&&yy>=&&yy<=m&&mark[xx][yy]==)
{
mark[xx][yy]=;
dfs(xx,yy,c_step+);
mark[xx][yy]=;
}
} }
int main()
{
int k,i,j;
while(scanf("%d %d %d",&n,&m,&k)!=EOF)
{
min_step=-;sum_min=;
for(i=;i<=n;i++)
{
memset(map[i],,sizeof(map[i]));
memset(mark[i],,sizeof(mark[i]));
}
for(i=;i<=k;i++)
{
int a,b;
scanf("%d %d",&a,&b);
map[a][b]=;
mark[a][b]=;
}
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
t=;
bfs(x1,y1); if(min_step==-)
printf("No Solution!\n");
else
{
dfs(x1,y1,);
printf("%d\n%d\n",min_step,sum_min);
}
}
return ;
} /* 3 3 1
2 2
1 1
3 3 */
 

FOJ 1205的更多相关文章

  1. Caused by: java.sql.BatchUpdateException: Transaction error, need to rollback. errno:1205 Lock wait timeout exceeded; try restarting transaction

    更新的时候报 Caused by: java.sql.BatchUpdateException: Transaction error, need to rollback. errno:1205 Loc ...

  2. Mysql Error:1205错误诊断

    前两天遇到一个1205(ER_LOCK_WAIT_TIMEOUT)的错误,弄了半天终于找到原因,掌握原理+细心才能找到罪归祸首.下面我给大家分享下这个问题的分析处理过程,希望对大家有所帮助.接到sla ...

  3. 排序+逆向思维 ACdream 1205 Disappeared Block

    题目传送门 /* 从大到小排序,逆向思维,从最后开始考虑,无后向性 每找到一个没被淹没的,对它左右的楼层查询是否它是孤立的,若是++,若不是-- 复杂度 O(n + m),还以为 O(n^2)吓得写了 ...

  4. Problem 2020 组合(FOJ)

    Problem 2020 组合 Accept: 714    Submit: 1724Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem ...

  5. magento后台登陆被锁定 索引报错的解决:General error: 1205 Lock wait timeout

    1. magento在索引的时候用shell,有时候会报错: General error: 1205 Lock wait timeout exceeded 这个时候,是因为行锁的原因,在表中您直接用s ...

  6. wikioi 1205 单词倒排

    /*====================================================================== 1205 单词翻转 题目描述 Description ...

  7. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

    测试库一条update语句报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction mysql> ...

  8. 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)

    题目地址:http://ac.jobdu.com/problem.php?pid=1205 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用非递归) 输入: 输入包括 ...

  9. hdu 1205

    #include <stdio.h> int a[1005000]; int main() { int t; scanf("%d",&t); while(t-- ...

随机推荐

  1. Lambda表达式和表达式树

    在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...

  2. 问问题_Java一次导出百万条数据生成excel(web操作)

    需求:在web页面操作,一次导出百万条数据并生成excel 分析: 1.异步生成Excel,非实时,完成后使用某种方式通知用户 2.生成多个excel文件,并打包成zip文件,因为一个excel容纳不 ...

  3. Hibernate-一对多的关系维护

    一对多 和多对一 一般是看需求来确定的,很多时候都是设置成双向的 举个最最普通的离子 :一个班级里面有多个学生 多个学生属于一个班级 从学生表来看 就是多对一的关系 从班级表来看就是一对多的关系 需求 ...

  4. SpringMVC实战

    一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...

  5. 德州扑克AI WEB版

    继续之前的德州扑克话题,上次的DOS界面确实没法看,我女朋友说这是什么鬼.哈哈,估计只有自己能玩了 这两天重构了一下界面,基于web服务器和浏览器来交互. 服务器和客户端之间用websocket通信, ...

  6. BZOJ-1024 生日快乐 DFS+一丝sb的数学思考

    1024: [SCOI2009]生日快乐 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1948 Solved: 1391 [Submit][Statu ...

  7. [HNOI2010]BOUNCE 弹飞绵羊

    题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...

  8. [Unity 游戏设计的元素]

    1.核心游戏机制 2.主题 3.功能集合 4.可能的附加功能 5.备用主题创意

  9. 轻量级应用开发之(06)Autolayout自动布局2

    一 Masonry 下载地址:https://github.com/SnapKit/Masonry

  10. Weak is not weak,Strong is not strong

    问题 今天做浏览器Controller的时候,碰到了一个奇怪的问题:每次pop浏览器controller之后,等几秒,总会碰到类似下面的错误(其中的xxxController就是浏览器或继承他的子类C ...