bnu1055 走迷宫2
来源:互联网 发布:网络歌曲八万 编辑:程序博客网 时间:2024/05/22 06:42
走迷宫是很有趣的一种游戏,能够锻炼人的记忆力和思维.现在,HK被困在一个迷宫里面了,请你帮助他计算一下有多少种不同的走法,能够让他走出迷宫.这个迷宫很奇怪,HK只能够沿着向上或者向右的方向走,不能回头.
迷宫使用一个N*M的矩阵来描述,矩阵中用’.’代表空格可以通行,用’*’代表障碍物,用’S’代表出发点,用’T’代表出口.例如下面的一个矩阵就描述了一个8*8的迷宫
…..T..
..*.
……*.
.**.*.
……*.
.**.*.
S..*….
……..
Input
每个输入文件只包含一组输入数据.
每组数据第一行是两个正整数N和M(N,M<=100).
接着是一个N*M的矩阵.
Output
输出HK能够选用的不同方法数(由于结果可能很大,输出模1908的余数即可).
这道题直接搜一下就行了,反正只有两个方向,不过需要记忆化一下,不然T了。
#include<iostream>using namespace std;#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<stdlib.h>#include<vector>#include<queue>#include<deque>#include<map>#include<set>#include<time.h>#define pi(x,y) printf("%d%c",(x),(y));#define pin(x) printf("%d\n",(x));#define si(x) scanf("%d",&(x))#define sii(x,y) scanf("%d%d",&(x),&(y))#define s3(x,y,z) scanf("%d%d%d",&(x),&(y),&(z))#define rep(x,y,z) for(int (x)=(y);(x)<(z);++(x))#define dep(x,y,z) for(int (x)=(y)-1;(x)>=(z);--(x))#define read int TcaseN;scanf("%d",&TcaseN);for(int Tcase=1;Tcase<=TcaseN;++Tcase)#define cls(x,y) memset((x),(y),sizeof((x)));#define pb(x) push_back(x)#define mp(x,y) make_pair((x),(y))#define max3(value_a,value_b,value_c) max(max(value_a,value_b),value_c)#define min3(value_a,value_b,value_c) min(min(value_a,value_b),value_c)#define GT(x) (x)=clock();#define fin(x) freopen(x,"r",stdin);#define fout(x) freopen(x,"w",stdout);///In This You Can Define Long Integer Type#define LONGTYPE long longtypedef LONGTYPE LL;typedef unsigned LONGTYPE ULL;const int maxint=((~((unsigned)(0)))>>1);const LL maxll=((~((unsigned LONGTYPE)(0)))>>1);const int inf=0x3f3f3f3f;const double PI=acos(-1.0);const int N=105;const int MOD=1908;char a[N][N];int n,m;int dp[N][N];pair<int,int> s,t;int d[2][2]={{0,1},{-1,0}};/**4 4...T........S...*/int dfs(int x,int y){ if(a[x][y]=='T')return 1; if((x<t.first)||(y>t.second))return 0; if(~dp[x][y])return dp[x][y]; int ans=0; for(int i=0;i<2;++i){ int tx=x+d[i][0],ty=y+d[i][1]; if(tx>=0&&tx<n&&ty>=0&&ty<m&&a[tx][ty]!='*'){ ans+=dfs(tx,ty); } } return dp[x][y]=(ans%MOD);}int main() {#ifdef tangge clock_t tSTART,tEND,t3; GT(tSTART);#endif // tangge /*Input:*/// freopen("1055.in","r",stdin); while(scanf("%d%d",&n,&m)==2){ for(int i=0;i<n;++i){ scanf("%s",a[i]); for(int j=0;j<m;++j){ if(a[i][j]=='S')s.first=i,s.second=j; else if(a[i][j]=='T')t.first=i,t.second=j; } } memset(dp,-1,sizeof(dp)); printf("%d\n",dfs(s.first,s.second)); }#ifdef tangge GT(tEND); printf("%.8lf\n",(tEND-tSTART)/1000.0);#endif // tangge return 0;}
阅读全文
1 0
- bnu1055 走迷宫2
- 老鼠走迷宫【2】
- BNU 走迷宫2
- 6.4.2走迷宫
- 走迷宫2
- 走迷宫函数_v0.2
- 栈应用2:走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- 走迷宫
- PHP中获取文件扩展名的N种方法
- 进制转换的通用方法
- JNI(C访问Java方法)
- systemd 进程服务文件参数解析
- [leetcode: Python]476. Number Complement
- bnu1055 走迷宫2
- lua table sort
- IOS atomic与nonatomic,assign,copy与retain的定义和区别
- VS使用技巧小结
- Unity3D:Camera的Clear Flags
- EMI滤波元件与滤波器的种类
- LinkHashMap实现LRU
- opencv 判断两张图片的相似度
- 阿里云ECS centos7配置jdk-tomcat-mysql 并部署javaweb项目