• Flood Fill 算法


    http://hi.baidu.com/11magic/item/b0d72a77d76ea122d7a89cfb

    UVA 的斜线迷宫题 真的学到不少

    http://wenku.baidu.com/view/8ed5b30702020740be1e9bfb.html

    View Code
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<queue>
    #define clr(a,b); memset(a,b,sizeof(a));
    using namespace std;
    int m,n;
    int h_maze,w_maze;
    char map[80][80];
    int a[300][300];
    int num_case=0;
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    //FloodFill算法
    int FloodFill(int x,int y)
    {
        if(x<0||x>=h_maze||y<0||y>=w_maze)
        return 0;
        if(a[x][y]!=0)
        return 0;
        a[x][y]=1;
        int sum=1;
        for(int i=0;i<4;i++)
        sum+=FloodFill(x+dir[i][0],y+dir[i][1]);
        return sum;
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            if(m==0&&n==0)
            break;
            clr(a,0);
            clr(map,0);
            getchar();
            //输入以及将图扩充三倍的大小
            for(int i=0;i<n;i++)
            gets(map[i]);
            for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(map[i][j]=='/')
                {
                    a[3*i+2][3*j]=1;
                    a[3*i+1][3*j+1]=1;
                    a[3*i][3*j+2]=1;
                }
                if(map[i][j]=='\\')
                {
                    a[3*i][3*j]=1;
                    a[3*i+1][3*j+1]=1;
                    a[3*i+2][3*j+2]=1;
                }
            }
            h_maze=3*n;
            w_maze=3*m;
            //从图的边缘填充,把不构成环的联通图外空间的点全部都给涂满。
            for(int i=0;i<h_maze;i++)
            {
                FloodFill(i,0);
                FloodFill(i,w_maze-1);
            }
            for(int i=0;i<w_maze;i++)
            {
                FloodFill(0,i);
                FloodFill(h_maze-1,i);
            }
            int max=0;
            int sum=0;
            for(int i=0;i<h_maze;i++)
            {
                for(int j=0;j<w_maze;j++)
                {
                    int result=FloodFill(i,j)/3;
                    if(result)
                    {
                        max=result>max?result:max;
                        sum++;
                    }
                }
            }
            printf("Maze #%d:\n",++num_case);
            if(sum)
            {
                printf("%d Cycles; the longest has length %d.\n",sum,max);
    
            }
            else
            printf("There are no cycles.\n");
            printf("\n");
            /*for(int i=0;i<3*n;i++)
            {
                for(int j=0;j<3*m;j++)
                {
                    printf("%d",a[i][j]);
                }
                printf("\n");
            }*/
        }
        return 0;
    }
  • 相关阅读:
    Opencv-Python 学习
    Python图片处理
    sae flask 微信公众平台开发
    Python 定位字符串
    Python检测IP合法 是否为公网IP
    Python requests 为pfsense 添加Routes
    lua-nginx-module 学习
    CDN 学习笔记
    教程
    2020-2021-1 20209327 《Linux内核原理与分析》第十二周作业
  • 原文地址:https://www.cnblogs.com/whatthefy/p/3052381.html
Copyright © 2020-2023  润新知