码迷,mamicode.com
首页 > 编程语言 > 详细

《算法竞赛从入门到进阶》第四章 搜索技术 hdu1312 "Red and Black" BFS

时间:2019-11-08 21:19:09      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:clu   stream   check   define   cout   class   include   sans   ack   

#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

标签:clu   stream   check   define   cout   class   include   sans   ack   

原文地址:https://www.cnblogs.com/chrysanthemum/p/11823037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!