HDOJ1548(DFS超内存,BFS过了)
2015-08-29 10:31
309 查看
DFS代码
BFS:AC代码
#include<iostream> #include<cstdio> using namespace std; #define Min(a,b) (a<b)?a:b const int MAX_N=205; const int INF=0x30303030; int floors[MAX_N]; int N, A, B; int step[MAX_N]; int dfs(int k) { if(k<1||k>N) return INF; if(step[k]!=-1) { return step[k]; } if(k==B) { return 0; } return step[k]=Min(dfs(k-floors[k])+1,dfs(k+floors[k])+1); } int main() { while(scanf("%d",&N)!=EOF&&N!=0) { scanf("%d %d",&A, &B); for(int i=1; i<=N; i++) { scanf("%d",&floors[i]); } memset(step,-1,sizeof(step)); int ans=dfs(A); if(ans>=INF) { printf("-1\n"); } else { printf("%d\n",ans); } } return 0; }
BFS:AC代码
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; const int MAX_N=205; const int INF=0x30303030; int floors[MAX_N]; int N, A, B; typedef pair<int, int> P; int vis[MAX_N]; int bfs() { memset(vis, 0, sizeof(vis)); queue<P> que; que.push(P(0,A)); vis[A]=1; while(!que.empty()) { P pos=que.front();que.pop(); int k=pos.second; int step=pos.first; if(k==B) { return step; } for(int i=-1; i<=1; i++) { int next=(k + i*floors[k]); if(next>=1&&next<=N&&!vis[next]) { vis[next]=1; que.push(P(step+1,next)); } } } return INF; } int main() { while(scanf("%d",&N)!=EOF&&N!=0) { scanf("%d %d",&A, &B); for(int i=1; i<=N; i++) { scanf("%d",&floors[i]); } int ans=bfs(); if(ans==INF) { printf("-1\n"); } else { printf("%d\n",ans); } } return 0; }
相关文章推荐
- 字符设备驱动设计
- webservice——nusoap详解
- 将linux默认python升级到2.7.4版本
- linux网络编程中阻塞和非阻塞socket的区别
- UI 09 tableView 中国省市区. 一个页面, 三个tableView
- linux学习笔记----进程管理----杀死进程and 把进程放入后台
- 1042 -- 二进制计算
- spring-PropertyPlaceholderConfigurer和PropertyOverrideConfigurer
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- 图片整理
- c++ 同步阻塞队列
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- input中加入图片的做法
- typeof constructor instanceof 判断类型
- MySQL
- 面试题25.二叉树中和为某一值的路径
- void * 指针介绍
- quartz cron表达式
- 前端的色彩选择
- python 多线程threading