zoukankan      html  css  js  c++  java
  • 啊哈算法---宝岛探险(深度优先搜索)

    /*宝岛探险:深度优化算法解答*/
    #include<stdio.h>
    
    int a[51][51];
    int book[51][51];
    int n, m, sum;
    
    void dfs(int x, int y)
    {
        int k, tx, ty;
        //定义一个方向数组
        int next[4][2] = { { 0, 1 },//向右走
        { 1, 0 },//向下走
        { 0, -1 },//向左走
        { -1, 0 } };//向上走
    
        //枚举四个方向
        for (k = 0; k<4; k++)
        {
            //计算下一步的坐标
            tx = x + next[k][0];
            ty = y + next[k][1];
    
            //判断是否越界
            if (tx<1 || tx>n || ty<1 || ty>m)
                continue;
            //判断是否是陆地
            if (a[tx][ty]>0 && book[tx][ty] == 0)
            {
                sum++;
                book[tx][ty] = 1;//标记这个点已经走过
                dfs(tx, ty);//开始尝试下一个点
            }
        }
        return;
    }
    
    
    int main()
    {
        int i, j, startx, starty;
        scanf_s("%d %d %d %d", &n, &m, &startx, &starty);
    
        //读入地图
        for (i = 1; i<=n; i++)
            for (j = 1; j<=m; j++)
                scanf_s("%d", &a[i][j]);
    
        book[startx][starty] = 1;
        sum = 1;
        //从降落的位置开始
        dfs(startx, starty);
        //最后输出岛屿的大小
        printf("%d
    ", sum);
        getchar(); getchar();
        return 0;
    }
  • 相关阅读:
    并查集N(The Suspects)
    (并查集)Ubiquitous Religions
    (并查集)How Many Tables
    并查集(畅通工程)
    约瑟夫环(栈和队列)
    队列-排队买饭
    栈的基本操作
    双向队列
    括号匹配
    Queue
  • 原文地址:https://www.cnblogs.com/lxt1105/p/6434617.html
Copyright © 2011-2022 走看看