机器人走迷宫

有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱。他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走。当机器人不能走的时候,也就是下一步会遇到陷阱、迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会)。请问这个机器人最多可以经过多少个方格。 

输入

对于每组数据,第一行两个数w和h,表示迷宫的行和列(1<=w,h<=10) 

接下来w行每行有h个字符用于描述这个迷宫。迷宫的‘.’表示空地,即为可以走的地方。‘*’表示陷阱,即为不能走的地方。迷宫中有一个英文字母,表示机器人的出发点,字母只有’U’,’D’,’L’,’R’四种。分别表示机器人的初始指令是向上,向下,向左,向右。 

输出

对于每组数据,输出一个整数,即机器人一共经过多少个方格。

样例输入

2 3
U..
.*.
4 4
R...
.**.
.**.
....

样例输出

4
12

 我的思路:

vis记录是否访问过,flag代表转了几次


#include <stdio.h>
#include <stdlib.h>
#include "iostream"
using namespace std;
int main(){
    int w,h;
    while(scanf("%d%d",&w,&h)==2){
        char **a=new char*[w];
        int **vis=new int*[w];
        for (int i=0;i<w;i++){
            a[i]=new char[h];
            vis[i]=new int[h];

        }
        for (int i=0;i<w;i++)
            scanf("%s",a[i]);
        int sx,sy;
        char z,t;
        for (int i=0;i<w;i++){
            for (int j=0;j<h;j++){
                vis[i][j]=0;
                z=a[i][j];
                if(z=='U'||z=='L'||z=='R'||z=='D'){
                    sx=i;
                    sy=j;
                    t=z;
                }
            }
        }
        int flag=0,ge=1,d;
        if(t=='U')代码:
import hashlib
import datetime


for n in range(3,11):
    starttime = datetime.datetime.now()
    pre=""
    i=0
    res=''
    while(pre!='0'*n):
        i+=1
        res=str(hashlib.sha256(("zhengzhaozuo"+str(i)).encode('utf-8')).hexdigest())
        pre=res[0:n]
    print("i: ",str(i),"  str:",res)
    endtime = datetime.datetime.now()
    print("时间:",(endtime - starttime).seconds,"s")


            d=0;
        if(t=='L')
            d=3;
        if(t=='R')
            d=1;
        if(t=='D')
            d=2;
        vis[sx][sy]=1;
        while(flag!=2){
            if(d==0)
                {
                    //cout<<"U";
                    if(sx==0||vis[sx-1][sy]==1||a[sx-1][sy]=='*')
                    {
                        flag++;
                        d=1;
                        continue;
                    }
                    ge++;
                    flag=0;
                    sx--;
                    vis[sx][sy]=1;

                }
            else if(d==1){
                    //cout<<"T";
                    if(sy==h-1||vis[sx][sy+1]==1||a[sx][sy+1]=='*')
                    {
                        flag++;
                        d=2;
                        continue;
                    }
                    ge++;
                    flag=0;
                    sy++;
                    vis[sx][sy]=1;

                }else if(d==2){
                    //cout<<"F";
                    if(sx==w-1||vis[sx+1][sy]==1||a[sx+1][sy]=='*')
                    {
                        flag++;
                        d=3;
                        continue;
                    }
                    ge++;
                    flag=0;
                    sx++;
                    vis[sx][sy]=1;

                }else if(d==3){
                   // cout<<"G";
                    if(sy==0||vis[sx][sy-1]==1||a[sx][sy-1]=='*')
                    {
                        flag++;
                        d=0;
                        continue;
                    }
                    ge++;
                    flag=0;
                    sy--;
                    vis[sx][sy]=1;

                }
        }
        cout<<ge;



    }

    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章