zoukankan      html  css  js  c++  java
  • POJ1562

     前前后后写了还几遍了,本来想着今天用BFS写,结果不知道怎么用BFS回溯,然后就用DFS写了,结果应该书数组爆了,不知道怎么回事

    之后又改了几遍

    #include <iostream>     
    using namespace std;
    int m,n;
    int k[8][2]={{1,0},{1,1},{1,-1},{-1,0},{-1,1},{-1,-1},{0,1},{0,-1}};
    char a[105][105];
    
    void dfs(int x,int y)
    {
        a[x][y]='*';
        for(int i=0;i<8;i++)
        {
            if(a[x+k[i][0]][y+k[i][1]]=='@' 
                && x+k[i][0]>=0 && x+k[i][0]<m
                && y+k[i][1]>=0 && y+k[i][1]<n)
                dfs(x+k[i][0],y+k[i][1]);
        }
    }
    
    int main()
    {
        while(cin>>m>>n)
        {
            if(m==0 && n==0)
                break;
            int ans=0;
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                    cin>>a[i][j];
            }
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(a[i][j]=='@')
                    {
                        dfs(i,j);
                        ans++;
                    }
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }

    BFS实现

    #include <iostream> 
    #include <queue>    
    using namespace std;
    int m,n;
    int t[8][2]={{1,0},{1,1},{1,-1},{-1,0},{-1,1},{-1,-1},{0,1},{0,-1}};
    char a[105][105];
    queue<int> q;
    
    void bfs(int x,int y)
    {
        q.push(x);
        q.push(y);
        while(!q.empty())
        {
            int k=q.front();
            q.pop();
            int l=q.front();
            q.pop();
            for(int i=0;i<8;i++)
            {
                if(a[k+t[i][0]][l+t[i][1]]=='@' 
                    && k+t[i][0]>=0 && k+t[i][0]<m
                    && l+t[i][1]>=0 && l+t[i][1]<n)
                    {
                        a[k+t[i][0]][l+t[i][1]]='*';
                        q.push(k+t[i][0]);
                        q.push(l+t[i][1]);
                    }
            }
        }
    }
    
    int main()
    {
        while(cin>>m>>n)
        {
            if(m==0 && n==0)
                break;
            int ans=0;
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                    cin>>a[i][j];
            }
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                {
                    if(a[i][j]=='@')
                    {
                        bfs(i,j);
                        ans++;
                    }
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    植物大战僵尸智慧树和金币的简单破解(二)
    植物大战僵尸任意阳光的简单破解(一)
    Bash漏洞分析
    树莓派4 安装vim8.2 编译python3支持
    JAVA实现剑指offer 大神博主网址
    IO流+集合完成功能
    Java学习IO流处理
    Java中拷贝图片IO流
    Java学习list集合练习二
    java学习list集合训练
  • 原文地址:https://www.cnblogs.com/benzikun/p/11171859.html
Copyright © 2011-2022 走看看