2017.08.02小结

今天做了第七题和第五题。

第五题

题意:是一个三维的地牢,给定起点和终点,问从起点到终点至少需要多长时间,每移动一次耗时1minute;如果不能到达终点,输出“Trapped!“。

思路:本题是一个普通的广搜题,但是是三维的,与二维的区别就在于从 每个点开始搜索时都会有6个方向,所以要设置6个方向向量,然后每搜到一个点就判断是不是终点。利用队列即可。 但是后来在几个细节上出了错误。

关键代码:

int bfs()
{
    int i;
    node a,next;
    queue<node> Q;
    a.x = sx,a.y = sy,a.z = sz;
    a.step = 0;
    visit[sx][sy][sz] = 1;
    Q.push(a);
    while(!Q.empty())
   {
        a = Q.front();
        Q.pop();
        if(a.x == ex && a.y == ey && a.z == ez)
        return a.step;
        for(i = 0; i<6; i++)
      {
        next = a;
        next.x = a.x+to[i][0];
        next.y = a.y+to[i][1];
        next.z = a.z+to[i][2];
        if(check(next.x,next.y,next.z))
        continue;
        visit[next.x][next.y][next.z] = 1;
        next.step = a.step+1;
        Q.push(next);
       }
    }
return 0;
}

第七题:

题意:找一个比N大于等于的数,使这个数每一位只有0和1,且能被N整除。

思路:本题我用了同余模定理:

(a*b)%n = (a%n *b%n)%n;

(a+b)%n = (a%n +b%n)%n;

本题要注意数据的类型,要定义成long long 类型。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值