fuzhuo---- 灰太狼 2022-06-15 08:20 141阅读 0赞 ## Problem Description ## **问题描述** 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间。小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路。请帮助小鼠a找出所有通向小鼠b的最短道路。 ![1205.gif][] 小鼠的迷宫 **编程任务** 对于给定的小鼠的迷宫,编程计算小鼠a通向小鼠b的所有最短道路。 ## ![prodesc.gif][] Input ## 本题有多组输入数据,你必须处理到EOF为止。 每组数据的第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示小鼠a所处的方格(p,q)和小鼠b所处的方格(r,s)。(1≤p,r≤n; 1≤q,s≤m) **结果输出** ## ![prodesc.gif][] Output ## 对于每组数据,将计算出的小鼠a通向小鼠b的最短路长度和有多少条不同的最短路输出。每组数据输出两行,第一行是最短路长度;第2行是不同的最短路数。每组输出之间没有空行。 如果小鼠a无法通向小鼠b则输出“No Solution!”。 ## ![prodesc.gif][] Sample Input ## 8 8 3 3 3 4 5 6 6 2 1 7 7 ## ![prodesc.gif][] Sample Output ## 11 96 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int f[50][50]; int ax,ay; int bx,by; int dx[4]= {0,1,0,-1}; int dy[4]= {1,0,-1,0}; int _count=0; int _min=9999999; int n,m,k; void dfs(int t,int curx,int cury) { if(t>_min)//步数已经超过了曾经出现了的最小步数,没必要搜索了。剪枝 return ; if(curx<=0 || cury<=0 || curx>n || cury>m)//越界了 return ; if(cury==by && curx==bx)//到了终点 { if(t<_min)//出现一个新的最短路径,就重新更新_count的数值为1 { _count=1; _min=t; } else if(t==_min) _count++; /*这样也一样,因为前面当t>_min的时候已经剪枝过了,所以t就只可能是小于和等于_min了 else _count++; */ return ; } for(int i=0; i<4; i++) { if(curx+dx[i]<=0 || cury+dy[i]<=0||curx+dx[i]>n||cury+dy[i]>m) continue; if(!f[curx+dx[i]][cury+dy[i]])//不是封闭的格子 { f[curx+dx[i]][cury+dy[i]]=1; dfs(t+1,curx+dx[i],cury+dy[i]); f[curx+dx[i]][cury+dy[i]]=0; } } return ; } int main() { while(~scanf("%d %d %d",&n,&m,&k)) { _count=0; _min=99999999; memset(f,0,sizeof(f)); for(int i=1; i<=k; i++) { int a,b; scanf("%d %d",&a,&b); f[a][b]=1; } scanf("%d %d",&ax,&ay); scanf("%d %d",&bx,&by); dfs(0,ax,ay); if(_count==0) printf("No Solution!\n"); else printf("%d\n%d\n",_min,_count); } return 0; } [1205.gif]: http://acm.fzu.edu.cn/image/Problem/1205.gif [prodesc.gif]: http://acm.fzu.edu.cn/image/prodesc.gif
相关 fuzhuo------ Problem 1411 最长配对子串 Problem 1411 最长配对子串 Accept: 379 Submit: 1470 Time Limit: 1000 mSec Memory Li 梦里梦外;/ 2022年06月15日 11:41/ 0 赞/ 84 阅读
相关 fuzhuo----Problem Description Problem Description Here is a famous story in Chinese history. That was about 2300 y 港控/mmm°/ 2022年06月15日 08:52/ 0 赞/ 147 阅读
相关 fuzhuo-----Problem 1019 猫捉老鼠 Problem Description 一只猫和一只老鼠在10\10的迷宫中。迷宫中的每个方格可以是空的,或者含有障碍。猫和老鼠可以进入任意一个空的方格中。当他们相遇时, 秒速五厘米/ 2022年06月15日 08:37/ 0 赞/ 135 阅读
相关 fuzhuo---Problem 1003 Counterfeit Dollar Problem Description Sally Jones has a dozen Voyageur silver dollars. However, only el 港控/mmm°/ 2022年06月15日 08:36/ 0 赞/ 117 阅读
相关 fuzhuo---Problem 1205 小鼠迷宫问题 Problem Description 问题描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的, 痛定思痛。/ 2022年06月15日 08:27/ 0 赞/ 127 阅读
相关 fuzhuo---109 8Fire Net Problem Description Suppose that we have a square city with straight streets. A map o 矫情吗;*/ 2022年06月15日 08:21/ 0 赞/ 193 阅读
相关 fuzhuo---- Problem Description 问题描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的 灰太狼/ 2022年06月15日 08:20/ 0 赞/ 142 阅读
相关 fuzhuo---Problem 1082 最大黑区域 二值图像是由黑白两种像素组成的矩形点阵,图像识别的一个操作是求出图像中最大黑区域的面积。请设计一个程序完成二值图像的这个操作。黑区域由黑像素组成,一个黑区域中的每个像素至少与该 朴灿烈づ我的快乐病毒、/ 2022年06月15日 07:49/ 0 赞/ 127 阅读
还没有评论,来说两句吧...