设为首页 加入收藏

TOP

BFS(一):广度优先搜索的基本思想(二)
2019-07-07 20:10:09 】 浏览:125
Tags:BFS 广度 优先 搜索 基本 思想
其上、下、左、右四个方向上搜索未走过的黑色方砖,将找到的黑色方砖的坐标入队列q。

      ③ 重复执行②,直至队列q为空,则求出了所有能走过的黑色方砖数。

      (2)源程序。

#include <iostream>

using namespace std;

#define N 21

struct Node

{

       int x;

       int y;

};

int dx[4]={-1,1,0,0};

int dy[4]={0,0,-1,1};

char map[N][N];

int visit[N][N];

int bfs(int startx, int starty,int w,int h)

{

       Node q[N*N],cur,next;   // q为队列

       int  front,rear;        // front为队头指针,rear为队尾指针

       int i,x,y,sum;    

       front=rear=0;           // 队列q初始化

       sum=0;

       cur.x=startx;   cur.y=starty; 

       visit[startx][starty]=1;

       q[rear++]=cur;          // 初始结点入队

       while(rear!=front)      // 队列不为空

       {

              cur=q[front++];     // 队头元素出队

              sum++;              // 方砖计数

              for (i=0;i<4;i++)

              {

                  x=cur.x+dx[i];  y=cur.y+dy[i];

                 if(x >=0 && x<h && y>=0 && y<w && map[x][y]!='#' && visit[x][y]==0)

                 {

                        visit[x][y] = 1;

                        next.x=x;  next.y=y;  // 由cur扩展出新结点next

                        q[rear++]=next;       // next结点入队

                  } 

              }

       }

       return sum;

}

int main()

{

   int i,j,pos_x,pos_y,w,h,sum;

   while(1)

   {

       cin>>w>>h;

        if (w==0 && h==0) break;

       for(i=0;i<h;i++)

       {

          for(j=0;j<w;j++)

          {

            &n

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇DFS(一):深度优先搜索的基本思.. 下一篇金明的预算方案

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目