
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
我改你千百遍,不他妈还是让哥哥ac了么。虽说这是简单模拟题,但毕竟哥哥人生中第一次亲手做,千般周折啊。
#include<iostream>
using namespace std;
struct ls
{
int x;
int y;
}cnt[203];
void go(char (*p)[11],int N,int M,int &co)
{
// for(int r=1;r<=N;r++)
//for(int e=1;e<=M;e++)
// cout<<p[r][e]<<" ";
int ro=1,i=0,count=0;
for(int v=0;v<2*N*M;v++) //这句是最后一次修改的地方 ,也就是最后一次错误的地方,试想如果想在矩阵中
{ //找到一个如果存在的循环,因为走一遍最大步数范围N*M,最大循环2*N*M。
if(p[ro][co]=='S')
{
count++; //cout<<"count="<<count<<"!"<<endl;
//cout<<"count="<<count<<"!"<<endl;
if(ro==N) //判断对应的行和列是否是边界值。
{
cnt[++i].x=ro; //此前这两句赋值都写成了i++导致的结果是两次增1,x,y赋值不在同一结构
//之后把第二句改为i ,发现还是不在同一结构。此后才又把第一个改为++i
cnt[i].y=co;
break;
}
else
{
cnt[++i].x=ro; //记录每走一步的坐标
cnt[i].y=co;
ro++; //cout<<cnt[i].x<<" "<<cnt[i].y<<" "<<endl;
}
}
else if(p[ro][co]=='E')
{
count++; //cout<<"count="<<count<<"!"<<endl;
if(co==M)
{
cnt[++i].x=ro;
cnt[i].y=co;
break;
}
else
{
cnt[++i].x=ro;
cnt[i].y=co;
co++; //cout<<cnt[i].x<<" "<<cnt[i].y<<" "<<endl;
}
}
else if(p[ro][co]=='N')
{
count++; //cout<<"count="<<count<<"!"<<endl;
if(ro==1)
{
cnt[++i].x=ro;
cnt[i].y=co;
break;
}
else
{
cnt[++i].x=ro;
cnt[i].y=co;
ro--; //cout<<cnt[i].x<<" "<<cnt[i].y<<" "<<endl;
}
}
else if(p[ro][co]=='W')
{
count++; //cout<<"count="<<count<<"!"<<endl;
if(co==1)
{
cnt[++i].x=ro;
cnt[i].y=co;
break;
}
else
{
cnt[++i].x=ro;
cnt[i].y=co;
co--; //cout<<cnt[i].x<<" "<<cnt[i].y<<" "<<endl;
}
}
}
//for(int t=1;t<=i;t++)
// cout<<cnt[t].x<<" "<<cnt[t].y<<"!"<<endl;
int flag=0,round,k,j;
for(j=1;j<=i;j++) //注意结构开始的下标从1
{
for( k=j+1;k<=i;k++)
{
if(cnt[j].x==cnt[k].x&&cnt[j].y==cnt[k].y)//暴力搜索最小周期数round,如果发现存在即跳出内层circle
{
flag=1;
round=k-j;
break;
}
}
if(flag==1)//必须加这条条件语句
break;
}
if(flag)
cout<<j-1<<" step(s) before a loop of "<<round<<" step(s)"<<endl;
else
cout<<count<<" step(s) to exit"<<endl;
}
int main()
{
int n,m,k;
while(cin>>n>>m,n+m)//题目说的是n,m不同时为零,对k没要求
{
cin>>k;
char ls[11][11];
for(int q=1;q<=n;q++)
for(int w=1;w<=m;w++)
cin>>ls[q][w];
go(ls,n,m,k);
}
return 0;
}
原文地址:http://blog.csdn.net/lsgqjh/article/details/44508463