• HDU1035——Robot Motion


    http://acm.hdu.edu.cn/showproblem.php?pid=1035

    这倒题讲的是机器人通过给定的方向标识,判断花多长时间退出或者话多久后进入循环。

    当然这道题也是用的深搜,改变的只有坐标就好了,问题是而且vis数组不需要reset,因为要判断是否重新回到一个点——会不会发生循环。

    难点:记录走了多少步,我是在vis数组中记录当前是第几步,一举两得。记住有可能一开始就进入循环,所以vis数组初始化为-1.

    #include<stdio.h>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    using namespace std;
    int n,m,vis[1001][1001],xx,yy,T,flag;
    char G[1001][1001];
    void dfs(int x,int y,int k);
    int main(){
        while(~scanf("%d%d",&n,&m)&&n!=0&&m!=0){
            scanf("%d",&T);
            for(int i=0;i<n;i++){
                scanf("%s",G[i]);
            }
            memset(vis,-1,sizeof(vis));
            vis[0][T-1]=0;
            flag=0;
            dfs(0,T-1,0);
        }
        return 0;
    } 
    void dfs(int x,int y,int k){
        if(flag==1)return;
        if(G[x][y]=='N'){
            xx=x-1;
            yy=y;
        }else
        if(G[x][y]=='S'){
            xx=x+1;
            yy=y;
        }else
        if(G[x][y]=='W'){
            yy=y-1;
            xx=x;
        }else
        if(G[x][y]=='E'){
            yy=y+1;
            xx=x;
        }
        if(xx<0||xx>=n||yy<0||yy>=m){
            flag=1;
            printf("%d step(s) to exit
    ",k+1);
            return;
        }
        if(vis[xx][yy]!=-1){
            flag=1;
            printf("%d step(s) before a loop of %d step(s)
    ",vis[xx][yy],k-vis[xx][yy]+1);
            return;
        }
        vis[xx][yy]=k+1;
        dfs(xx,yy,k+1);
    }
  • 相关阅读:
    如何设计高性能架构
    如何做好架构设计
    面向复杂度架构设计
    怎么画架构图
    架构师前期的工作
    如何设计高可用架构
    如何设计可扩展的架构
    架构师的中期工作
    架构师的基本职责
    如何全面提升架构设计质量
  • 原文地址:https://www.cnblogs.com/Yvettey-me/p/4523592.html
Copyright © 2020-2023  润新知