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;
}
#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;
}
相关文章推荐
- 一个关于里层div在外层div里居中的问题
- UI基础整理-11
- Project Euler 108:Diophantine reciprocals I 丢番图倒数I
- MySQL数据库引擎
- NFC 读取公交卡信息
- 二叉查找树
- QT5 QWT安装
- mysql5.7 在Mac上的安装
- nmon采集测试数据
- Android学习历程11-SharedPreferences介绍
- [linux]解析crontab
- UIIAlertController的自动消失
- 关于支付(支付宝和微信)
- 为什么PCB上的单端阻抗控制50欧姆【转载】
- 【慕课笔记】第七章 方法 第2节 JAVA中无参无返回值方法的使用
- SQL Server安装完成后3个需要立即修改的配置选项(转载)
- 【ITOO】---easyUI的Combobox实现级联查询
- 06 多线程
- System.Diagnostics命名空间里的Debug类和Trace类的用途
- svn 清理失败 (clean up 失败) 的解决方法