《算法竞赛从入门到进阶》第四章 搜索技术 hdu1312 "Red and Black" BFS
Posted chrysanthemum
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法竞赛从入门到进阶》第四章 搜索技术 hdu1312 "Red and Black" BFS相关的知识,希望对你有一定的参考价值。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
char room[25][25];
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};
int Wx,Hy,num;
//Wx,Hy:长宽的边界 ,num:从初始瓷砖到能到达的瓷砖的总数
#define CHECK(x,y) (x<Wx&&x>=0&&y>=0&&y<Hy)
//检查是否越界
struct node
{
int x,y;
};
void BFS(int dx,int dy)
{
queue<node> q;
node start,next;
start.x = dx;
start.y = dy;
q.push(start);//把当前节点入队
while(!q.empty())
{
start = q.front();
q.pop();
for(int i=0;i<4;++i)
{
next.x=start.x+dir[i][0];
next.y=start.y+dir[i][1];
if(CHECK(next.x,next.y)&&room[next.x][next.y]==‘.‘)
{
room[next.x][next.y]=‘#‘;//标记一下当前节点已经走过了
num++;//步数自增
q.push(next);//将子节点入队
}
}
}
}
int main()
{
int x,y,dx,dy;
//dx,dy: 人的站位
while(cin>>Wx>>Hy)
{
if(Wx==0&&Hy==0)
{
break;
}
for(y=0;y<Hy;++y)
{
for(x=0;x<Wx;++x)
{
cin>>room[x][y];
if(room[x][y]==‘@‘)
{
dx=x;
dy=y;
}
}
}
num=1;
BFS(dx,dy);
cout<<num<<endl;
}
return 0;
}
以上是关于《算法竞赛从入门到进阶》第四章 搜索技术 hdu1312 "Red and Black" BFS的主要内容,如果未能解决你的问题,请参考以下文章