hdu oj 1010 老是超时 先放到这里 参考别人ac代码
2014-04-15 20:41
363 查看
#include <stdio.h> #include <math.h> int dir[][2] = {1,0,-1,0,0,1,0,-1}; bool vis[10][10]; char maze[10][10]; int n,m,t_time,end_x,end_y; int myabs(int x) { return x>=0?x:-x; } bool DFS(int pos_x,int pos_y,int t) { int absx = abs(end_x-pos_x); int absy = abs(end_y-pos_y); if(maze[pos_x][pos_y]=='D'&&t==t_time) { return true; } //所用的时间超过所需最大时间 if(t>=t_time) { return false; } //设下的时间比理论最少到达时间要少那么必定到不了 if(t_time-t<(absx+absy)) { return false; } //剩余时间比理论最少时间多出的不是偶数必然到不了 if((t_time-t-absx-absy)%2!=0) { return false; } int i,next_x,next_y; for(i=0;i<4;i++) { next_x = pos_x+dir[i][0]; next_y = pos_y+dir[i][1]; if(next_x>=0&&next_x<n&&next_y>=0&&next_y<m&&!vis[next_x][next_y]&&maze[next_x][next_y]!='X') { vis[next_x][next_y] = true; if(!DFS(next_x,next_y,t+1)) { vis[next_x][next_y] = false; } else { return true; } } } return false; } int main() { int i,j,star_x,star_y; bool flag; while(scanf("%d %d %d",&n,&m,&t_time)==3) { if(n==0&&m==0&&t_time==0) break; for(i=0;i<10;i++) for(j=0;j<10;j++) vis[i][j] = false; for(i=0;i<n;i++) { scanf("%s",maze[i]); } for (i=0;i<n;i++) { for (j=0;j<m;j++) { if(maze[i][j]=='S') { star_x = i; star_y = j; } if(maze[i][j]=='X') { end_x = i; end_y = j; } } } vis[star_x][star_y] = true; flag = DFS(star_x,star_y,0); //flag = BFS(star_x,star_y,0); if(!flag) { printf("NO\n"); } else { printf("YES\n"); } } return 0; }
相关文章推荐
- Java设计模式之从[魔兽争霸、星际争霸、DOTA编队]分析迭代器(Iterator)模式
- Win7+Editplus配置Python的开发环境
- java 访问权限
- 使用 OpenSSL API 进行安全编程
- codeforces Round #241(div2) C解题报告
- Spring的IoC的配置
- OA项目左边页面的代码!
- Qt在VS2010中使用
- Java TimerTask
- 异常处理:你不可能总是对的2 - 零基础入门学习Python033
- java学习总结——第十一天
- lua -- mysql导出json
- DCT JAVA
- Hadoop安装与编程(一)——安装部分
- typedef和typename关键字
- codeforces Round #241(div2) B解题报告
- 如何在64位windows7上同时使用32位和64位的Eclipse
- java
- python 学习笔记
- lua -- 物品的配置文件,表的形式保存