zoukankan      html  css  js  c++  java
  • HDOJ1548(DFS超内存,BFS过了)

    DFS代码

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define Min(a,b) (a<b)?a:b
    const int MAX_N=205;
    const int INF=0x30303030;
    int floors[MAX_N];
    int N, A, B;
    int step[MAX_N];
    int dfs(int k)
    {
        if(k<1||k>N)    return INF;
        if(step[k]!=-1)
        {
            return step[k];
        }
        if(k==B)
        {
            return 0;
        }
        return step[k]=Min(dfs(k-floors[k])+1,dfs(k+floors[k])+1);
    }
    
    int main()
    {
          while(scanf("%d",&N)!=EOF&&N!=0)
          {
              scanf("%d %d",&A, &B);
              for(int i=1; i<=N; i++)
              {
                  scanf("%d",&floors[i]);
              }
              memset(step,-1,sizeof(step));    
              int ans=dfs(A);
              if(ans>=INF)
              {
                  printf("-1
    ");
              }
              else
              {
                  printf("%d
    ",ans);
              }
          }
          
        return 0;
    }

    BFS:AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int MAX_N=205;
    const int INF=0x30303030;
    int floors[MAX_N];
    int N, A, B;
    typedef pair<int, int> P;
    int vis[MAX_N];
    
    int bfs()
    {
        memset(vis, 0, sizeof(vis));
        queue<P> que;
        que.push(P(0,A));
        vis[A]=1;
        while(!que.empty())
        {
            P pos=que.front();que.pop();
            int k=pos.second;
            int step=pos.first;
            if(k==B)
            {
                return step;
            }
            for(int i=-1; i<=1; i++)
            {
                int next=(k + i*floors[k]);
                if(next>=1&&next<=N&&!vis[next])
                {
                    vis[next]=1;
                    que.push(P(step+1,next));
                }
            }
            
        }
        
        return INF;
    }
    
    int main()
    {
          while(scanf("%d",&N)!=EOF&&N!=0)
          {
              scanf("%d %d",&A, &B);
              for(int i=1; i<=N; i++)
              {
                  scanf("%d",&floors[i]);
              }
              int ans=bfs();
              if(ans==INF)
              {
                  printf("-1
    ");
              }
              else
              {
                  printf("%d
    ",ans);
              }
          }
          
        return 0;
    }
  • 相关阅读:
    WPF -- PasswordBox数据绑定方法
    WPF -- 窗口Clip+Effect效果
    WPF -- Generic.xaml文件报错
    WebCombo 客户端绑定数据
    NPOI 导入excel
    Bootstrap +mvc实现网络共享文件查阅(应用于企业ISO等共享文件呈现)
    webdatagrid 列样式
    datagridview 设置列对齐及显示数据格式
    datagridview
    webdatagrid 列只读
  • 原文地址:https://www.cnblogs.com/program-ccc/p/4768682.html
Copyright © 2011-2022 走看看