HDOJ1010(BFS)
Posted zeroArn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDOJ1010(BFS)相关的知识,希望对你有一定的参考价值。
//为什么bfs不行呢,想不通
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 10
int buf[maxn][maxn],vis[maxn][maxn]={false};
int n,m,t;
struct node
{
int x,y;
};
node st,ed;
int movx[4]={0,0,1,-1};
int movy[4]={1,-1,0,0};
int check(int x,int y)
{
if(x<0||x>=n)return 0;
else if(y<0||y>=m)return 0;
else if(buf[x][y]==-1)return 0;
else if (vis[x][y]==true)return 0;
return 1;
}
void bfs_traverse(node s)
{
queue < node >q;
q.push(s);
vis[s.x][s.y]=true;
while(!q.empty())
{
node tmp=q.front();q.pop();
vis[tmp.x][tmp.y]=true;
if(tmp.x==ed.x&&tmp.y==ed.y)return ;
for(int i=0;i<4;i++)
{
int x=tmp.x+movx[i],y=tmp.y+movy[i];
if(check(x,y))
{
node s;
s.x=x;s.y=y;
if(vis[x][y]==false)
{
buf[x][y]=buf[tmp.x][tmp.y]+1;
vis[x][y]=true;
}
q.push(s);
}
}
}
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%d%d%d",&n,&m,&t)!=EOF)
{
getchar();
memset(buf,0,sizeof(buf));
memset(vis,false,sizeof(vis));
if(!n&&!m&&!t)break;
int i,j;
char c;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%c",&c);
if(c==‘S‘)
{
st.x=i;
st.y=j;
}
else if(c==‘D‘)
{
ed.x=i;
ed.y=j;
}
else if(c==‘X‘)buf[i][j]=-1;
}
getchar();
}
bfs_traverse(st);
if(buf[ed.x][ed.y]==t)printf("YES\n");
else printf("NO\n");
}
return 0;
}
以上是关于HDOJ1010(BFS)的主要内容,如果未能解决你的问题,请参考以下文章