zoukankan      html  css  js  c++  java
  • HDU

    wa了一遍,炸了两遍

    (1)迷宫题中的模拟题。只需要简单代码就可以ac。如果程序有问题,最后就会卡死,出现runtime error。

    (2)边界问题一定要小心,数组是从0开始的,就要考虑r--会不会小于0,导致访问Vis[r][c]下标越界。正常情况下,越界很有可能是下标为负数引起的,此类问题要当心。

    (3)map不要随便用,正常开二维数组vis就可以了。

    (4)这种四个方向的,很多操作都重复了,要适当简化代码

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100
    #define rep(i,a,b) for(int i=(a);i<(b);i++)
    #define ll long long
    char s[maxn][maxn];
    int vis[maxn][maxn];
    
    int main()
    {
        int n,m,k;
        while(~scanf("%d%d",&n,&m))
        {
            rep(i,0,maxn){
                rep(j,0,maxn)
                    vis[i][j]=0;
            }
            if(n==0&&m==0)
                break;
            scanf("%d",&k);
            rep(i,0,n)
                scanf("%s",s[i]);
    
            int r=0;
            int c=k-1;
            vis[r][c]=1;
    
            int ans=0;
            int cnt=0;
    
            int f=1;
    
            while(r>=0&&r<n&&c>=0&&c<m)//起点也可能在迷宫外,必须加上条件
            {
                int pre=vis[r][c];
                ans=vis[r][c];
                if(s[r][c]=='S')
                    r++;
                else if(s[r][c]=='N')
                    r--;
                else if(s[r][c]=='W')
                    c--;
                else if(s[r][c]=='E')
                    c++;
    
                if(r<0||r>=n||c<0||c>=m)//r,c可能小于0,必须加上
                    break;
                if(vis[r][c])
                {
                    f=-1;
                    ans=pre-vis[r][c]+1;
                    cnt=vis[r][c]-1;
                    break;
                }
                vis[r][c]=pre+1;
            }
    
            if(f==1)
            {
                printf("%d step(s) to exit
    ",ans);
            }
            else if(f==-1)
            {
                printf("%d step(s) before a loop of %d step(s)
    ",cnt,ans);
            }
        }
        return 0;
    }
  • 相关阅读:
    [一个64位操作系统的设计与实现] 3.1 Func_GetFATEntry疑惑
    【参考】 实现X86_64架构下的BootLoader(二)文件系统
    LBA和CHS转换(转)
    Grafana 重置admin密码
    linux-source: not found ubuntu执行脚本报错
    Hbase学习
    高并发理解
    Linux下安装Artemis
    SpringInAction 第八章 发送异步消息
    SpringInAction 六七章总结
  • 原文地址:https://www.cnblogs.com/pipitongkw1/p/10714603.html
Copyright © 2011-2022 走看看