hdu~1010(dfs)
来源:互联网 发布:淘宝3c数码配件 编辑:程序博客网 时间:2024/05/23 01:59
题目链接
#include <stdio.h>#include <math.h>int m,n,t,flag; //行列,是否到终点的标记int sx,sy,ex,ey; int xmove[5]={0,0,1,0,-1},ymove[5]={0,1,0,-1,0}; //记录四个方向char a[10][10];void dfs(int x,int y,int tt){ int i; if(t==tt && x==ex && y==ey) //到终点 { flag=1; return ; } if(tt>t) //时间剪枝 return ; if(abs(x-ex)+abs(y-ey)>(t-tt)) //路程剪枝 return ; for(i=1;i<=4;i++) { int tx=x+xmove[i]; int ty=y+ymove[i]; if(tx>m || tx<1 || ty>n || ty<1 || a[tx][ty]=='X')//判断当前点是否超范围或是否撞墙 continue ; a[x][y]='X'; //符合则上一个点标记为墙,表示已走过 dfs(tx,ty,tt+1); if(flag) return ; else a[x][y]='.'; }}int main(){ while(scanf("%d %d %d",&m,&n,&t)!=EOF) { if(m==0 && n==0 && t==0) return 0; int k=0; flag=0; int i,j; for(i=1;i<=m;i++) { scanf("%s",&a[i][1]); for(j=1;j<=n;j++) { if(a[i][j]=='S') { sx=i; sy=j; } if(a[i][j]=='D') { ex=i; ey=j; } if(a[i][j]=='.') k++; } } if((abs(sx-ex)+abs(sy-ey)+t)%2==1 || k+1<t)//神奇的奇偶剪枝,这是一个很关键的地方 { printf("NO\n"); continue; } dfs(sx,sy,0); if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}
0 0
- hdu 1010(DFS)
- hdu 1010DFS
- DFS 剪枝 hdu 1010
- hdu 1010 DFS
- 【DFS】hdu 1010
- hdu~1010(dfs)
- HDU 1010 DFS+剪枝
- hdu 1010 DFS + 剪枝
- hdu 1010 dfs+剪枝
- hdu 1010(dfs+剪枝)
- hdu 1010(dfs+剪枝)
- HDU 1010 DFS+剪枝
- 图论 DFS HDU 1010
- hdu 1010 DFS+剪枝
- HDU-1010(DFS)
- hdu oj 1010 dfs+剪枝
- hdu 1010 dfs+奇偶剪枝
- hdu 1010 (DFS+剪枝)
- 低光数码单反相机而夜间拍摄设置
- 冒泡排序_汇编语言的子程序调用与宏定义实现
- 代码分析你的网站从SEO的角度来看
- Divide Two Integers
- Android性能优化之使用线程池
- hdu~1010(dfs)
- 最短路模版整理
- 从Ajax的Web站点中提取数据
- 丹尼尔·克雷格詹姆斯·邦德锻炼培训
- java中的堆和栈
- 个性化的价格每头服务
- VS2010 更改MFC标题栏图标和生成的执行文件图标
- 东南得克萨斯公告
- 高需求ERESOURCE ERP软件在孟买,马哈拉施特拉邦和古吉拉特邦