zoukankan      html  css  js  c++  java
  • poj1562-DFS

    如果想在DFS过程中计算油田个数会很麻烦,所以要简化思想。我们可以把每一个油田当成一次DFS(只对"@"的进行DFS,这样每当DFS退出时,表示一块油田搜索完毕 ),这样每次DFS后油田数加一,最后输出结果。

    #include<stdio.h>
    #include<string.h>
    char map[101][101];
    int oil;
    int m,n;
    bool book[101][101];
    int next[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};       //存储8个方向
    bool iforder(int x,int y){                                //判断是否越界
        if(x<0||x>=m||y<0||y>=n)  
        return true;  
        return false;  
    }
    void dfs(int x,int y){
        if(map[x][y]=='*')                                   //跳过“*”
            return;
        for(int i=0;i<8;i++){
            int tx=x+next[i][0];
            int ty=y+next[i][1];
            if(iforder(tx,ty)||book[tx][ty])                        //跳过已经搜索过或者越界的
                continue;
            book[tx][ty]=1;
            if(map[tx][ty]=='@')
                dfs(tx,ty);
        }
    }
    int main(){
        scanf("%d %d",&m,&n);
        while(m!=0&&n!=0){
            for(int i=0;i<m;i++)
                scanf("%s",&map[i]);
            memset(book,0,sizeof(book));
            oil=0;
            for(int i=0;i<m;i++)
                for(int j=0;j<n;j++){
                    if(!book[i][j]&&map[i][j]!='*')    {
                        dfs(i,j);
                        oil++;                                //每次DFS后油田数+1
                    }
                }
            printf("%d
    ",oil);
            scanf("%d %d",&m,&n);
        }
    }
  • 相关阅读:
    ubuntu下ssh服务相关操作
    搜索引擎的基础-倒排索引
    mysql重置密码
    mysql 服务器配置
    Activiti如何替换已部署流程图
    循环select查询结果集
    存储过程范例,有输入输出参数,带回滚
    sql server中字符串无法替换空格的问题
    Myeclipse实用快捷键总结
    Linux中添加用户与删除用户
  • 原文地址:https://www.cnblogs.com/lvcoding/p/6593280.html
Copyright © 2011-2022 走看看