HDOJ 1242 DFS
来源:互联网 发布:怪物猎人帅哥捏脸数据 编辑:程序博客网 时间:2024/05/17 02:19
DFS 剪枝
#include <iostream>#include"sstream"#include"string"#include"algorithm"#include"cstring"#include"cstdio"using namespace std;int dir[4][2]={1,0,-1,0,0,1,0,-1};char g[300][300];int r,c;int visit[300][300];int minL[300][300];int minn;int pos;const int inf=9999999;void dfs(int si,int sj,int cnd){ if(g[si][sj]=='a') { if(cnd<minn) minn=cnd; return; } for(int i=0;i<4;i++) { int ki=si+dir[i][0]; int kj=sj+dir[i][1]; if((ki<r&&ki>=0&&kj<c&&kj>=0)&&(g[ki][kj]=='.'||g[ki][kj]=='x'||g[ki][kj]=='a')&&!visit[ki][kj]) { if(cnd+1>minL[ki][kj]) continue; else minL[ki][kj]=cnd+1; //记录到x,y最短距离 if(g[ki][kj]=='.'||g[ki][kj]=='a') { visit[ki][kj]=1; dfs(ki,kj,cnd+1); visit[ki][kj]=0; } else if(g[ki][kj]=='x') { visit[ki][kj]=1; dfs(ki,kj,cnd+2); visit[ki][kj]=0; } } }}int main(){ //freopen("a.txt","r",stdin); while(cin>>r>>c) { memset(visit,0,sizeof(visit)); int si,sj; int i,j; for(i=0;i<r;i++) for(j=0;j<c;j++) { minL[i][j]=inf; cin>>g[i][j]; if(g[i][j]=='r') {sj=j;si=i;} } minn=inf; visit[si][sj]=1; dfs(si,sj,0); if(minn<inf) cout<<minn<<endl; else cout<<"Poor ANGEL has to stay in the prison all his life." <<endl; } return 0;}
TLE
#include <iostream>#include"sstream"#include"string"#include"algorithm"#include"cstring"#include"cstdio"using namespace std;int dir[4][2]={1,0,-1,0,0,1,0,-1};char g[300][300];int r,c;int visit[300][300];int minn;int pos;const int inf=9999999;void dfs(int si,int sj,int cnd){ if(g[si][sj]=='a') { if(cnd<minn) minn=cnd; return; } for(int i=0;i<4;i++) { int ki=si+dir[i][0]; int kj=sj+dir[i][1]; if((ki<r&&ki>=0&&kj<c&&kj>=0)&&(g[ki][kj]=='.'||g[ki][kj]=='x'||g[ki][kj]=='a')&&!visit[ki][kj]) { if(cnd+1>inf) continue; if(g[ki][kj]=='.'||g[ki][kj]=='a') { visit[ki][kj]=1; dfs(ki,kj,cnd+1); visit[ki][kj]=0; } else if(g[ki][kj]=='x') { visit[ki][kj]=1; dfs(ki,kj,cnd+2); visit[ki][kj]=0; } } }}int main(){ //freopen("a.txt","r",stdin); while(cin>>r>>c) { memset(visit,0,sizeof(visit)); int si,sj; int i,j; for(i=0;i<r;i++) for(j=0;j<c;j++) { cin>>g[i][j]; if(g[i][j]=='r') {sj=j;si=i;} } minn=inf; visit[si][sj]=1; dfs(si,sj,0); if(minn<inf) cout<<minn<<endl; else cout<<"Poor ANGEL has to stay in the prison all his life." <<endl; } return 0;}
0 0
- hdoj-1242-Rescue(DFS)
- HDOJ 1242 DFS
- HDOJ 1242 Rescue(DFS+剪枝)
- HDOJ 2212 DFS
- hdoj 1016 (dfs)
- hdoj 1455 Sticks 【dfs】
- hdoj 1518 Square 【dfs】
- hdoj 2212 DFS 【水】
- hdoj 1015 Safecracker 【dfs】
- HDOJ 1015 Safecracker-DFS
- hdoj 1241 【DFS】
- HDOJ Lotto (DFS)
- HDOJ 变形课 (DFS)
- HDOJ Seeding (DFS)
- hdoj 5024 枚举+dfs
- HDOJ Beat (DFS)
- HDOJ Zipper (DFS)
- hdoj 1015 Safecracker【DFS】
- 自定义空间怎么在context传入activity给空间操作
- 2016.6.10自学笔记(异常、类的练习题)
- 梳理spring篇-Aop机制
- Activity,Service,BroadcastReceiver生命周期
- android 进阶之UI
- HDOJ 1242 DFS
- Leetcode Factor Combinations
- bnuoj 51121 Simple Polynomial Problem(栈+运算符重载+多项式运算)
- ios之property修饰符
- java计算日期相差的天、时、分、秒
- Scrapy项目unicodeDecodeError_ascii错误的解决
- JavaScript中的document.cookie的使用
- 多线程及断点续传
- 详细介绍AIDL 的使用