hdu1175 bfs
来源:互联网 发布:网络十大恐怖歌曲 编辑:程序博客网 时间:2024/06/17 22:35
我的思路是记录拐弯点 还有方向 但是wa了,我觉得大致思路是对的。我先贴出来 最近忙 没有时间改 他们说dfs比较简单 但我还是习惯用bfs做
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<queue>
using namespace std;
int n,m,q,maze[1010][1010],vis[1010][1010];
int x1,y1,x2,y2,r;
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
struct node
{
int x;
int y;
int k;
int dir;
};
int bfs(int c,int d)
{node a,b;
queue<node>que;
a.x=c;a.y=d;a.k=0;a.dir=-1;
que.push(a);
while(que.size())
{
a=que.front();
que.pop();
if(a.x==x2&&a.y==y2&&a.k<=2)
{//cout<<" ss"<<a.k<<endl;
return 1;
}
for(int i=0;i<4;i++)
{
b.x=a.x+dx[i];
b.y=a.y+dy[i];
b.dir=a.dir;
b.k=a.k;
if(b.dir==-1)
{
b.dir=i;
}
else if(b.dir!=i)
{
b.k=a.k+1;
b.dir=i;
}
if(b.x>=0&&b.x<n&&b.y>=0&&b.y<m&&maze[b.x][b.y]==0&&vis[b.x][b.y]==0&&b.k<=2)
{
vis[b.x][b.y]=1;
que.push(b);
}
}
}
return -1;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
scanf("%d",&maze[i][j]);
}
scanf("%d",&q);
for(int i=0;i<q;i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1=x1-1;x2=x2-1;y1=y1-1;y2=y2-1;
if(maze[x1][y1]!=maze[x2][y2])
{cout<<"NO"<<endl;
continue;
}
if(maze[x1][y1]==0||maze[x2][y2]==0)
{cout<<"NO"<<endl;
continue;
}
if(x1==x2&&y1==y2)
{cout<<"NO"<<endl;
continue;
}
r=maze[x2][y2];
maze[x2][y2]=0;
memset(vis,0,sizeof(vis));
if(bfs(x1,y1)>0)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
maze[x2][y2]=r;
}
}
return 0;
}
- hdu1175 bfs
- HDU1175(bfs)
- hdu1175 bfs
- hdu1175 暴力简单bfs
- hdu1175- 连连看BFS
- HDU1175连连看 BFS
- hdu1175 (BFS)
- hdu1175连连看(BFS)
- hdu1175-连连看(简单bfs)
- HDU1175 连连看(bfs)
- 第一个bfs题目 hdu1175连连看
- hdu1175简单的搜索(bfs法)
- hdu1175 连连看 (BFS+优先队列)
- hdu1175
- hdu1175
- HDU1175
- HDU1175
- 连连看(hdu1175 bfs+方向记录+贪心剪枝)
- Apache主配置文件httpd.conf 详解
- 数列有序
- android graphic(13)—surface flinger中的“事务”
- mysql迁移(mysql error 13)
- 微信小程序开发教程(基础篇)4-关于回调函数,匿名函数,闭包的杂谈
- hdu1175 bfs
- ProgressDialog使用总结
- 初探event bus和RxBus
- CodeForces 490BQueue
- 【hdu 1711】Number Sequence(kmp)
- 开心
- 类中添加成员函数
- 深度学习资料二
- fcntl 和 ioctl