hdu 1728 逃离迷宫(BFS+稍微改变一下搜索步骤)
来源:互联网 发布:淘宝满就减怎么设置 编辑:程序博客网 时间:2024/06/05 17:30
逃离迷宫
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11982 Accepted Submission(s): 2891
第1行为两个整数m, n (1 ≤ m, n ≤ 100),分别表示迷宫的行数和列数,接下来m行,每行包括n个字符,其中字符'.'表示该位置为空地,字符'*'表示该位置为障碍,输入数据中只有这两种字符,每组测试数据的最后一行为5个整数k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示gloria最多能转的弯数,(x1, y1), (x2, y2)表示两个位置,其中x1,x2对应列,y1, y2对应行。
25 5...***.**...........*....1 1 1 1 35 5...***.**...........*....2 1 1 1 3
noyes
注意输入的时候是要先输入纵坐标在输入横坐标。WA了无数次才发现的。苦逼。
AC掉了的代码:
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int n,m,k;
int x1,y1,x2,y2;
char ch[105][105];
int vs[105][105];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct Node{
int x;
int y;
int counter;
};
queue<Node>Q;
bool go(int x, int y)
{
if(x>=1&&x<=n&&y>=1&&y<=m&&ch[x][y]=='.')
return true;
return false;
}
void bfs()
{
int i;
Node p,q;
p.x=x1;
p.y=y1;
p.counter=-1;
Q.push(p);
vs[x1][y1]=1;
while(!Q.empty())
{
p=Q.front();
Q.pop();
for(i=0; i<4; i++)
{
q.x=p.x+dx[i];
q.y=p.y+dy[i];
while(go(q.x,q.y))
{
if(vs[q.x][q.y]==0)
{
vs[q.x][q.y]=1;
q.counter=p.counter+1;
Q.push(q);
if(q.x==x2 && q.y==y2 && q.counter<=k)
{
cout<<"yes"<<endl;
return ;
}
}
q.x+=dx[i];
q.y+=dy[i];
}
}
}
cout<<"no"<<endl;
return ;
}
int main()
{
int N,i,j;
cin>>N;
while(N--)
{
memset(ch,0,sizeof(ch));
memset(vs,0,sizeof(vs));
while(!Q.empty())
Q.pop();//要对队列进行清空操作;
cin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
cin>>ch[i][j];
cin>>k>>y1>>x1>>y2>>x2;
if(x1==x2 && y1==y2)
cout<<"yes"<<endl;
else
bfs();
}
return 0;
}
- hdu 1728 逃离迷宫(BFS+稍微改变一下搜索步骤)
- 逃离迷宫 HDU-1728 BFS深度搜索
- bfs hdu 1728 逃离迷宫
- hdu 1728 逃离迷宫 (BFS)
- hdu 1728 逃离迷宫 BFS
- HDU 1728 逃离迷宫 BFS
- HDU-1728-逃离迷宫(BFS)
- HDU 1728 逃离迷宫 BFS
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(bfs)
- HDU 1728 逃离迷宫【bfs】
- HDU 1728 逃离迷宫【BFS】
- HDU 1728 逃离迷宫(BFS)
- hdu 1728 逃离迷宫(BFS)
- HDU 1728 逃离迷宫【BFS】
- hdu 1728 逃离迷宫(搜索:BFS+优先队列)
- 搜索专题(DFS&&BFS&&剪枝)HDU 1728-逃离迷宫
- 【搜索-BFS】逃离迷宫
- UVA 10003 Cutting Sticks(区间dp)
- 【Android】对话框AlertDialog的使用(一)
- Win7上Git安装及配置过程
- 字符串根据字典值排序
- Bochs 找不到XpmCreatePixmapFromData的问题
- hdu 1728 逃离迷宫(BFS+稍微改变一下搜索步骤)
- MyEclipse设置编码方式
- 解决android.os.NetworkOnMainThreadException
- 【leetcode】Subsets
- ubuntu设置自动关机
- 线性时间排序
- ExtJS+Struts 实现树的动态加载小例子
- Understanding Unix/Linux Programming note:chapter 1:执行可执行文件时的参数传递
- coj 1061