zoukankan      html  css  js  c++  java
  • hdu 1312 Red and Black DFS搜索 or BFS搜索

    二维图:
    .:黑砖
    #:红砖
    @:起点
    求由起点最多能找到多少个黑砖,当然红砖是不能走的(上下左右四个方向);
    基础的搜索题,深搜或广搜都可。

     深搜:

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    char map[21][21];
    int co,ro,ans;
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    bool judge(int x,int y)
    {
        if(x<0||y<0||x>=co||y>=ro||map[x][y]=='#')
        return false;
        return true;
    }
    void dfs(int a,int b)
    {
         int i,x,y;
         for(i=0;i<4;i++)
         {
           x=a+dir[i][0];
           y=b+dir[i][1];
           if(!judge(x,y))
            continue;
           map[x][y]='#';
           ans++;
           dfs(x,y);
         }
    }
           
    int main()
    {
          int i,j,a,b;
          while(scanf("%d%d",&ro,&co),co+ro)
          {
              ans=1;
             for(i=0;i<co;i++)
              scanf("%s",map[i]);
             for(i=0;i<co;i++)
             for(j=0;j<ro;j++)
                 if(map[i][j]=='@')
                 {
                     a=i;b=j;
                 }
             map[a][b]='#';
             dfs(a,b);
             printf("%d\n",ans);
          }
          return 0;
    }



    广搜:

    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<string.h>
    #include <iostream>
    using namespace std;
    char map[21][21];
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    int visited[21][21];
    int co,ro;
    struct coor
    {
        int x,y;
    };
    queue<coor>que;
    bool judge(int x,int y)
    {
        if(x<0||y<0||x>=co||y>=ro||map[x][y]=='#'||visited[x][y])
        return false;
        return true;
    }
    int bfs(int a,int b)
    {
        int x,y,i,ans=0;
        coor in,out;
        memset(visited,0,sizeof(visited));
        while(!que.empty())
        que.pop();
        in.x=a;
        in.y=b;
        visited[a][b]=1;
        que.push(in);
        while(!que.empty())
        {
            out=que.front();
            que.pop();
            ans++;
            for(i=0;i<4;i++)
            {
                x=out.x+dir[i][0];
                y=out.y+dir[i][1];
                if(!judge(x,y))
                continue;
                visited[x][y]=1;
                in.x=x;
                in.y=y;
                que.push(in);
            }
        }
        return ans;
    }
               
    int main()
    {
        int i,a,b,j;
        while(scanf("%d%d",&ro,&co),co+ro)
        {
            for(i=0;i<co;i++)
            scanf("%s",map[i]);
            for(i=0;i<co;i++)
            for(j=0;j<ro;j++)
            {
                if(map[i][j]=='@')
                {
                    a=i;
                    b=j;
                }
            }
           
            printf("%d\n",bfs(a,b));
        }
        return 0;
    }
           
                       

  • 相关阅读:
    [Unity菜鸟] 摄像头
    [Unity菜鸟] Final IK
    谷歌 值得关注的网站
    [Unity菜鸟] 射线
    [Unity菜鸟] Character控制移动
    [Unity菜鸟] FBX模型动画提取
    [Unity菜鸟] Time
    [Unity菜鸟] 产生各不相同的随机数
    [Unity菜鸟] 材质
    反调试:检测进程名
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740266.html
Copyright © 2011-2022 走看看