zoukankan      html  css  js  c++  java
  • ppoj 3278搜索bfs+剪枝

    http://poj.org/problem?id=3278

    大致题意:

    给定两个整数n和k

    通过 n+1或n-1 或n*2 这3种操作,使得n==k

    输出最少的操作次数

    解题思路:

    说实话,要不是人家把这题归类到BFS,我怎么也想不到用广搜的= = 自卑ing。。。

    水题水题,三入口的BFS

    注意的地方有二:

    1、  由于用于广搜的 队列数组 和 标记数组  相当大,如果定义这两个数组时把它们扔到局部去,编译是可以的,但肯定执行不了,提交就等RE吧= =

    大数组必须开为 全局 。。。常识常识。。。

    2、  剪枝。直接广搜一样等着RE吧= =

    不剪枝的同学试试输入n=0  k=100000。。。。。。铁定RE

    怎么剪枝看我程序

     1 /*
     2 给定两个整数n和k
     3 通过 n+1或n-1 或n*2 这3种操作,使得n==k
     4 输出最少的操作次数*/
     5 #include<iostream>
     6 #include<cstdio>
     7 #include<cstring>
     8 #include<queue>
     9 using namespace std;
    10 int map[200005];
    11 bool dis[200005];
    12 int n,k,temp;
    13 int bfs()
    14 {
    15     queue<int>q ;
    16     //memset(dis,0,sizeof(dis));
    17     //memset(map,0,sizeof(map));
    18     q.push(n);
    19     map[n]=0;
    20 
    21     //int temp;
    22     //q.pop();
    23     while(q.size()!=0)
    24     {
    25         temp=q.front();
    26         q.pop();
    27         dis[n]=1;
    28         if(temp==k)
    29         {
    30             printf("%d
    ",map[temp]);
    31             return map[temp];
    32         }
    33         if((temp-1)>=0&&dis[temp-1]==0)
    34         {
    35             map[temp-1]=map[temp]+1;
    36             dis[temp-1]=1;
    37             q.push(temp-1);
    38         }
    39         if((temp+1)>=0&&dis[temp+1]==0)
    40         {
    41             map[temp+1]=map[temp]+1;
    42             dis[temp+1]=1;
    43             q.push(temp+1);
    44         }
    45         if((temp*2)<=100000&&dis[temp*2]==0)
    46         {
    47             map[temp*2]=map[temp]+1;
    48             dis[temp*2]=1;
    49             q.push(temp*2);
    50         }
    51     }
    52 }
    53 int main()
    54 {
    55     //int n,k;
    56     scanf("%d%d",&n,&k);
    57 bfs();
    58    //  printf("%d
    ",bfs());
    59     //printf("%d
    ",map[temp]);
    60     return 0;
    61 }
  • 相关阅读:
    api
    git分支合并
    Zookeeper 入门,看这篇就够了
    SQL分组查询
    [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:lovemu' did not find a matching property.
    事务 事务隔离级别
    DDL DML DCL的理解
    局域网和广域网
    三种数据交换方式
    通信子网和资源子网
  • 原文地址:https://www.cnblogs.com/SSYYGAM/p/4510929.html
Copyright © 2011-2022 走看看