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