首页 > 编程语言 > 详细

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

时间:2017-02-23 21:01:37      阅读:322      评论:0      收藏:0      [点我收藏+]
/*着色法:在深度优化搜索里增加color的参数*/
#include<stdio.h>

int a[51][51];
int book[51][51];
int n, m, sum;
void dfs(int x, int y, int color)
{
    int k, tx, ty;
    //定义一个方向数组
    int next[4][2] = { { 0, 1 },//向右走
    { 1, 0 },//向下走
    { 0, -1 },//向左走
    { -1, 0 } };//向上走

    a[x][y] = color;//对a[x][y]格子染色

    //枚举四个方向
    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, color);//开始尝试下一个点
        }
    }
    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, -1);//用-1表示对齐进行染色 

    //输出已经染色后的地图
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= m; j++)
        {
            printf("%3d", a[i][j]);//%3d中的3是c语言中的场宽
        }
        printf("\n");
    }
    getchar(); getchar();
    return 0;
}

技术分享

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

原文:http://www.cnblogs.com/lxt1105/p/6435245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!