1.10每日总结

上午

学习了动态链表的输入与输出,在链表题组中刷了那道合并链表的题但是出现了问题:输入完两条链表后仍然需要输入一个数字才能完成链接

下午

开始听课,知道了为什么bBFS(宽度)能找到类似于迷宫问题的最小解:

BFS是一层一层搜寻答案的,所以,当遇到了某一层没有分支后,便返回;由图可知,通过BFS搜寻的返回值必定是最小值。

晚上

刷题时间,讲课的时候听到了填涂颜色那道题不需要回溯(好像是),便思考那道题,具体的思路是:定义一个与地图相同的vis数组,从边边的一点开始遍历,只要不是0就将其标记为1;遇到1或边界就返回(要将边界染色不然会出现错误,类似于套娃求中间的那个娃),全部标记完后,开始输出,当vis数组有0时(剩下的这些0都是被1包围着的),输出2;其余按原地图输出。

#include<stdio.h>
int mp[50][50],vis[50][50];
int n;
int fx[4]= {0,0,-1,1};
int fy[4]= {1,-1,0,0};

void painting(int x,int y)
{
    if(x<0||x>n+1||y<0||y>n+1||vis[x][y]!=0)        //越界、未遍历过?????>n+1??????
    {
        return;
    }
    vis[x][y]=1;        //涂鸦

        for(int i=0; i<4; i++)
        {
            int l=x+fx[i];
            int r=y+fy[i];
            painting(l,r);      //不需要回溯


        }

}
int main()
{
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            scanf("%d",&mp[i][j]);
            if(mp[i][j]==0)
            {
                vis[i][j]=0;
            }
            else
            {
                vis[i][j]=1;            //copy地图
            }
        }
    }
    painting(0,0);                 //从左上角那个点开始查找

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            if(vis[i][j]==0)
            {
                printf("2 ");
            }
            else
            {
                printf("%d ",mp[i][j]);
            }
        }
        printf("\n");
    }
    return 0;

}

结束了混水摸鱼的一天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值