问题标题: 1403数字方阵怎么写??

2
1

5
已采纳
樊澄宇
樊澄宇
新手光能
新手光能

思路:用两个搜索

一个判断(x,y)是否可以从0改成2(不与边界接壤,等于0)

另一个把所有与(x,y)相关联的0改成2

然后判断每一个格子:

如果可以从0改成2,则把所有与它相关联的0改成2

 

核心代码:

第一个搜索:

bool search_pd(int x,int y)
{
    if (map[x][y]!=0)
    {
        if (map[x][y]==-1) return false;
        return true;
    }
    bool flag=true;
    for (int i=0;i<4;i++)
    {
        int nx=x+dir[i][0],ny=y+dir[i][1];
        if (!used[nx][ny])
        {
            used[nx][ny]=true;
            flag=search_pd(nx,ny) && flag;
            used[nx][ny]=false;
        }

    }
    return flag;
}

第二个搜索:

void search_print(int x,int y)
{
    if (map[x][y]!=0) return;
    for (int i=0;i<4;i++)
    {
        int nx=x+dir[i][0],ny=y+dir[i][1];
        map[x][y]=2;
        search_print(nx,ny);
    }
}

对于格子的判断:

for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        {

            if (search_pd(i,j))
            {
                search_print(i,j);
            }

        }
    }

 

樊澄宇在2018-01-21 19:15:12追加了内容

不过,希望楼主仅供参考,不要摘抄

0
我要回答