機器人走迷宮

有一個愚蠢的機器人走進一個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;
}

 

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