首页 > 代码库 > HDU 1010 深搜+减枝
HDU 1010 深搜+减枝
HDU 1010
/************************************************************************* > File Name: HDU1010.cpp > Author:yuan > Mail: > Created Time: 2014年11月05日 星期三 22时22分56秒 ************************************************************************/ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int n,m,t,start_x,start_y,door_x,door_y; char map[10][10]; bool ans; bool flag[10][10]; int next[4][2]={1,0,0,1,-1,0,0,-1}; bool check(int pos_x,int pos_y) { if(flag[pos_x][pos_y]==0&&pos_x>=0&&pos_x<n&&pos_y>=0&&pos_y<m&&(map[pos_x][pos_y]=='.'||map[pos_x][pos_y]=='D')) return 1; return 0; } void dfs(int cur_x,int cur_y,int count) { // int cur_x=point/m; //int cur_y=point%m; // printf("cur_x:%d,cur_y:%d\n",cur_x,cur_y); if(count>t) return; if(ans==1) return; if(cur_x==door_x&&cur_y==door_y) { if(count==t) ans=1; // printf("count:%d\n",count); return; } int temp=(t-count)-abs(door_x-cur_x)-abs(door_y-cur_y); if(temp<0||temp&1) return; for(int i=0;i<4;i++){ int pos_x=cur_x+next[i][0]; int pos_y=cur_y+next[i][1]; if(check(pos_x,pos_y)) { flag[pos_x][pos_y]=1; dfs(pos_x,pos_y,count+1); flag[pos_x][pos_y]=0; } } } int main() { // printf("zhang\n"); while(~scanf("%d%d%d",&n,&m,&t)){ // scanf("%d%d%d",&n,&m,&t); if(!n&&!m&&!t) break; memset(map,0,sizeof(map)); memset(flag,0,sizeof(flag)); ans=0; for(int i=0;i<n;i++) { scanf(" %s",map[i]); } // for(int i=0;i<n;i++) // printf("%s\n",map[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(map[i][j]=='S') start_x=i,start_y=j; if(map[i][j]=='D') door_x=i,door_y=j; } // printf("Start_x:%d,Start_y:%d,door_x:%d,door_y:%d\n",start_x,start_y,door_x,door_y); flag[start_x][start_y]=1; // int start_point=start_x*m+start_y; dfs(start_x,start_y,0); if(ans) printf("YES\n"); else printf("NO\n"); } return 0; }
HDU 1010 深搜+减枝
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。