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\n");
          }
          else
          {
              printf("%d\n",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\n");
          }
          else
          {
              printf("%d\n",ans);
          }
      }
      
    return 0;
}

 

posted on 2015-08-29 10:31  vCoders  阅读(237)  评论(0编辑  收藏  举报

导航