HDOJ---1035 Robot Motion

这几天比较颓= = ~~~~效率几乎为零


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

题意:

一个迷宫每个格子都有{W(左走),E(右走),S(下走),N(上走)}中的一个字符,表示下一步行走方向;

输入:

迷宫的  纵向长度m和横向长度n  以及 起点:[0][x];

输出如果能走出去输出:

(ans) step(s) to exit;
如果出不去  存在循环输出 
(几步之后)step(s) before a loop of (几个格子的循环) step(s)
我能想到的是写个递归……应该是……
map[][]构造迷宫;
visit[][]记录是否被访问;
然后两个变量,一个记录步数(有循环则为进入循环前的),一个记录循环长度(若为0则不输出)(人太颓了,回来贴代码- - ,先去睡会儿
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char map[15][15];
int vis[15][15];
int r,c,st;
int loop,step;
int dfs(int x,int y,int num)
{
    if(x>r||x<1||y<1||y>c)
    {
        cout<<num-1<<" step(s) to exit"<<endl;
        return 0;
    }
    if(vis[x][y])
    {
        cout<<vis[x][y]-1<<" step(s) before a loop of ";
        return 1;
    }
    vis[x][y]=num;
    if(map[x][y]=='N')
    {
        if(dfs(x-1,y,num+1)==1)
            cout<<vis[x][y]-vis[x-1][y]+1<<" step(s)"<<endl;
    }
    else if(map[x][y]=='S')
    {
        if(dfs(x+1,y,num+1)==1)
            cout<<vis[x][y]-vis[x+1][y]+1<<" step(s)"<<endl;
    }
    else if(map[x][y]=='E')
    {
        if(dfs(x,y+1,num+1)==1)
            cout<<vis[x][y]-vis[x][y+1]+1<<" step(s)"<<endl;
    }
    else
    {
        if(dfs(x,y-1,num+1)==1)
            cout<<vis[x][y]-vis[x][y-1]+1<<" step(s)"<<endl;
    }
    return 0;
}
int main()
{
   
    while(cin>>r>>c>>st,r&&c)
    {
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=r;i++)
            for(int j=1;j<=c;j++)
            cin>>map[i][j];
        dfs(1,st,1);
    }
    return 0;
}

posted @ 2015-05-29 17:31  XqwKen  阅读(173)  评论(0编辑  收藏  举报