zoukankan      html  css  js  c++  java
  • 障碍路线Obstacle Course

    P1649 [USACO07OCT]障碍路线Obstacle Course

    裸的dfs,今天学了一个新招,就是在过程中进行最优性减枝。

    #include<bits/stdc++.h>
    using namespace std;
    int n,sx,sy,ex,ey,ans=99999999;
    char a[110][110];
    int d[110][110];
    int x[]={-1,0,1,0};
    int y[]={0,1,0,-1};
    bool vis[110][110];
    
    void dfs(int nx,int ny,int dir,int num)
    {
        if(nx>n||nx<1||ny>n||ny<1||vis[nx][ny]||ans==0)
        return;
        if(a[nx][ny]=='x')
        return;
        if(num>=ans)
        return ;
        if(num>d[nx][ny])
        return;
        d[nx][ny]=num;
        if(nx==ex&&ny==ey)
        {
            if(num<ans)
            ans=num;
            return ;
        }
        for(int i=0;i<4;i++)
        {
            if((abs(i-dir)==2||abs(i-dir)==0)&&nx+x[i]>0&&ny+y[i]>0&&!vis[nx+x[i]][ny+y[i]])
            {
            vis[nx][ny]=true;
            dfs(nx+x[i],ny+y[i],i,num);    
            vis[nx][ny]=false;
            }
            else
            if(!vis[nx+x[i]][ny+y[i]]&&nx+x[i]>0&&ny+y[i]>0)
            {
            vis[nx][ny]=true;    
            dfs(nx+x[i],ny+y[i],i,num+1);
            vis[nx][ny]=false;    
            }
        }
    }
    
    int main()
    {
      cin>>n;
      for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          {
              cin>>a[i][j];
              if(a[i][j]=='A')
              sx=i,sy=j;
              if(a[i][j]=='B')
              ex=i,ey=j;
          }
          
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
          {
              d[i][j]=99999999;
          }  
      for(int i=0;i<4;i++)
          dfs(sx+x[i],sy+y[i],i,0);
      if(ans!=99999999)
      cout<<ans;
      else
      cout<<-1;
      return 0;
    }
  • 相关阅读:
    九个令人兴奋的新功能将与Java 9 展示两点
    自学前端开发 新版css时钟效果图
    自学前端,你要的学习资料到了~~~~~~
    Angularjs中ng-repeat与移动端滑动插件iScroll的冲突
    计蒜客学习记录
    明明的随机数
    模板题
    泉州一中复赛模拟
    快速幂模板
    NOIP2013
  • 原文地址:https://www.cnblogs.com/war1111/p/7418486.html
Copyright © 2011-2022 走看看