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;
    }
  • 相关阅读:
    CDQ
    MySQL中的类Decode用法
    HTMLTestRunner生成空白resault.html
    参数化时按行读取txt文件,如何去掉换行符" "
    打开本地html的一些设置
    python中文乱码例子
    Python异常处理实例
    Python根据上下限生成不重复随机数1
    Linux自定义命令
    Python IDLE 清屏工具
  • 原文地址:https://www.cnblogs.com/benzikun/p/11171859.html
Copyright © 2011-2022 走看看