hdu 1312
hdu 1312 题目
• 一个长方形的房间,铺着方砖,每块砖是 #或黑点. 。
• 一个人站在黑砖上,可以按上、下、左、右方向移动到相邻的砖。
• 他不能在#上移动,他只能在黑砖上移动。
• 起点是@,要求:遍历所有黑点。
BFS
- BFS 使用队列辅助实现;节点元素包含了位置的x,y。
- 将元素进队时将元素标记为已经访问,下次搜索时跳过。
- 返回的是可以走的位置数目。
//ECUST luoyongjun
#include<bits/stdc++.h>
using namespace std;
char room[23][23];
int dir[4][2] = {
{
-1, 0}, //向左。左上角坐标是(0, 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) //是否在room里
struct node {
int x, y;
};
void BFS(int dx, int dy) {
num = 1; //起点也包含在砖块内
queue<node> q; //队列中放坐标点
node start, next;
start.x = dx;
start.y = dy;
q.push(start);
while (!q.empty(