您的位置:首页 > 其它

hdu 1728 逃离迷宫

2016-01-22 19:28 375 查看
AC代码:

#include <iostream>
#include <cstring>
using namespace std;

struct node{
char ch;
int turn;
int dir;
}maze[110][110];

const int dx[] = {0,1,-1,0},dy[] = {1,0,0,-1};
int m,n,t;
int start_x,start_y;

void dfs(int x,int y){
int i,flag;
for(int i = 0; i < 4; i++){
int xx = x+dx[i],yy = y+dy[i];
if(xx>0 && xx<=m && yy>0 && yy<=n && maze[xx][yy].ch!='*'){
flag = 0;
if (i != maze[x][y].dir){
flag = 1;
}
if ((maze[xx][yy].turn==-1 || (maze[x][y].turn+flag)<=maze[xx][yy].turn) && maze[x][y].turn<=t && (xx!=start_x || yy!=start_y)){ //判断下一位置的情况并剪枝
maze[xx][yy].turn = maze[x][y].turn+flag;
maze[xx][yy].dir = i;
maze[xx][yy].ch = '*';
dfs(xx,yy); //从下一位置继续搜索
maze[xx][yy].ch = '.';
}
}
}
}

int main(){
int T,minturn;
int end_x,end_y;
cin>>T;
while(T--){
cin>>m>>n;
memset(maze,0,sizeof(maze));
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
cin>>maze[i][j].ch;
maze[i][j].turn = -1;
}
}
cin>>t>>start_y>>start_x>>end_y>>end_x;
maze[start_x][start_y].dir = -1;
dfs(start_x,start_y);
minturn = maze[end_x][end_y].turn;
if(start_x==end_x && start_y==end_y)
cout<<"yes"<<endl;
else if(minturn<=t && minturn!=-1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: