啊哈算法---宝岛探险(深度优先搜索)

/*宝岛探险:深度优化算法解答*/
#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\n", sum);
    getchar(); getchar();
    return 0;
}

 

posted @ 2017-02-23 17:43  walanwalan  阅读(593)  评论(0编辑  收藏  举报