1035 给你格子,机器人只能按照字符指向的方向走,判断几步走出格子迷宫或者n步走入m步数的循环
自己写的超时了↓,不知道怎样计算循环的步数搜了别人代码,好厉害啊。。。(′へ`、 )
#include<iostream>
using namespace std;
int main()
{
int mark[12][12] = {0};
char map[12][12];
int m,n,q,x,y,p,f;
bool isloop = false;
while(cin>>m>>n>>q)
{
f = 0;
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
{
cin>>map[i][j];
}
}
p = 0;
x = 1,y =q;
while (x!=0 && y!=0 && x!=m+1 && y!=n+1)
{
mark[x][y] = 1;
switch (map[x][y])
{
case'W':y--;break;
case'E':y++;break;
case'N':x--;break;
case'S':x++;break;
}
p++;
if (mark[x][y] == 1)
{
mark[x][y] = 2;
do
{
switch (map[x][y])
{
case'W':y--;break;
case'E':y++;break;
case'N':x--;break;
case'S':x++;break;
}
f++;
}while (mark[x][y]!=2);
cout<<p-f<<" step(s) before a loop of "<<f<< " step(s)"<<endl;
isloop = true;
break;
}
}
if(isloop == false)
cout<<p<<" step(s) to exit"<<endl;
}
return 0;
}
别人的代码↓ ( מּ,_מּ)( מּ,_מּ)( מּ,_מּ)
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
char data[15][15];
int row;
int col;
int start;
int i,j;
int k;
bool sign;
while(cin>>row>>col&&row+col!=0)
{
cin>>start;
for(i=0;i<row;i++)
cin>>data[i];
i=0;j=start-1;
k=0;sign=false;
while(i<row&&j<col&&i>=0&&j>=0)
{
switch (data[i][j])
{
case 'N':data[i][j]=k++; //直接把走过的路标记成可以表示成当前步数的数字
i--;break;
case 'S':data[i][j]=k++;
i++;break;
case 'E':data[i][j]=k++;
j++;break;
case 'W':data[i][j]=k++;
j--;break;
default:k=k-data[i][j]; //当走上标记过的数字直接用步数减去之前的步数就是循环的步数
sign=true;
}
if(sign)
break;
}
if(sign)
printf("%d step(s) before a loop of %d step(s)\n",data[i][j],k);
else
printf("%d step(s) to exit\n",k);
}
}