zoukankan      html  css  js  c++  java
  • POJ3009

    题目说的是 给了一个n*m的矩阵然后 一个石头 可以向上下左右 移动 记住 一旦移动 了就自由朝着这个方向一直移动 知道停下来停下来的 三个条件

    1  遇到边界 表示游戏结束游戏失败

    2  遇到block 就是下一步就会遇到 block 然后停下来 block消失

    3  遇到目标点 停下来游戏成功

    每次停下来后要想在走 必须加一次 移动 然后计算最小的移动使得 石头到达目的地

    模拟的 进行深搜

    #include<cstdio>
    #include<string.h>
    #include<iostream>
    using namespace std;
    const int maxn=25;
    int maze[maxn][maxn];
    int dirx[]={0,0,1,-1};
    int diry[]={1,-1,0,0};
    int m,n,sx,sy,ex,ey,mav;
    void dfs(int x,int y,int dir,int time){
        int xx=x;int yy=y,tx,ty;
        if(x==ex&&y==ey){ if(time<mav) mav=time; return ; }
        if(time>=mav) return ;
        while(true){
              tx=xx+dirx[dir];
              ty=yy+diry[dir];
              if(tx<0||tx>=n||ty<0||ty>=m)return ;
              if(tx==ex&&ty==ey){  if(time<mav) mav=time; return ; }
              if(maze[tx][ty]==1) break;
              xx=tx; yy=ty;
        }
        maze[tx][ty]=0;
        for(int i=0;i<4;i++){
            int rx=xx+dirx[i];
            int ry=yy+diry[i];
                if(rx>=0&&rx<n&&ry>=0&&ry<m&&maze[rx][ry]==0){
    
                  dfs(rx,ry,i,time+1);
    
         }
        }
        maze[tx][ty]=1;
    
    }
    int main(){
    
        while(true){
            scanf("%d%d",&m,&n);
            if(n==0&&m==0) break;
            for(int i=0;i<n;i++)
            for(int j=0;j<m;j++){
                scanf("%d",&maze[i][j]);
                if(maze[i][j]==2){ sx=i;sy=j; maze[i][j]=0; }
                if(maze[i][j]==3){ ex=i;ey=j; maze[i][j]=0; }
            }
            mav=11;
            for(int i=0;i<4;i++){
                int xx=sx+dirx[i];
                int yy=sy+diry[i];
                if(maze[xx][yy]==0&&xx<n&&xx>=0&&yy<m&&yy>=0){  dfs(xx,yy,i,1); }
            }
            if(mav==11)printf("-1
    ");
            else printf("%d
    ",mav);
        }
    
       return 0;
    }
    View Code
  • 相关阅读:
    TensorFlow小记
    Faster R-CNN学习记录
    C语言创建文件夹
    ffmpeg应用:将连续图像转为视频文件
    VMWare 搭建 Hadoop 完全分布式集群(含HBASE)
    HBASE 过滤器
    HBASE API 操作
    [Unity] 打包时报错:UnityEditor.BuildPlayerWindow+BuildMethodException
    [Unity] 有关Unity中使用VideoPlayer突然无法播放视频的问题
    [Unity3D]C#切换plane上的图片
  • 原文地址:https://www.cnblogs.com/Opaser/p/3669377.html
Copyright © 2011-2022 走看看