hdu 1035 简单题
/*
2009-01-16 16:24:36 Accepted 1035 15MS 72K 1340 B
一道简单题
给你一个起点,你按照矩阵中路径给出的指令走就是了,输出走的步数或者循环状态的步数
*/
#include<iostream>
#include<cstring>
#define N 12
int map[N][N];
int used[N][N];
int ct[N][N];
int tx[]={1,0,-1,0};
int ty[]={0,1,0,-1};
int r,c,s;
bool init()
{
char ch;
int tmp;
scanf("%d%d%d",&r,&c,&s);
if(r==0 && c==0 && s==0)
return false;
memset(used,0,sizeof(used));
memset(ct,0,sizeof(ct));
memset(map,-1,sizeof(map));
for(int i=1;i<=r;i++)
{
getchar();
for(int j=1;j<=c;j++)
{
scanf("%c",&ch);
switch(ch)
{
case 'S' : tmp=0;break;
case 'E' : tmp=1;break;
case 'N' : tmp=2;break;
case 'W' : tmp=3;break;
}
map[i][j]=tmp;
}
}
return true;
}
void make()
{
int x=1,y=s,tmp=0,pre=0;
ct[x][y]=0;
while(map[x][y]!=-1 && !used[x][y])
{
ct[x][y]=pre+1;
pre=ct[x][y];
tmp=map[x][y];
used[x][y]=1;
x+=tx[tmp];
y+=ty[tmp];
}
if(map[x][y]==-1)
printf("%d step(s) to exit\n",pre);
else
if(used[x][y]==1)
printf("%d step(s) before a loop of %d step(s)\n",ct[x][y]-1,pre-ct[x][y]+1);
}
int main()
{
while(init())
{
make();
}
return 0;
}
2009-01-16 16:24:36 Accepted 1035 15MS 72K 1340 B
一道简单题
给你一个起点,你按照矩阵中路径给出的指令走就是了,输出走的步数或者循环状态的步数
*/
#include<iostream>
#include<cstring>
#define N 12
int map[N][N];
int used[N][N];
int ct[N][N];
int tx[]={1,0,-1,0};
int ty[]={0,1,0,-1};
int r,c,s;
bool init()
{
char ch;
int tmp;
scanf("%d%d%d",&r,&c,&s);
if(r==0 && c==0 && s==0)
return false;
memset(used,0,sizeof(used));
memset(ct,0,sizeof(ct));
memset(map,-1,sizeof(map));
for(int i=1;i<=r;i++)
{
getchar();
for(int j=1;j<=c;j++)
{
scanf("%c",&ch);
switch(ch)
{
case 'S' : tmp=0;break;
case 'E' : tmp=1;break;
case 'N' : tmp=2;break;
case 'W' : tmp=3;break;
}
map[i][j]=tmp;
}
}
return true;
}
void make()
{
int x=1,y=s,tmp=0,pre=0;
ct[x][y]=0;
while(map[x][y]!=-1 && !used[x][y])
{
ct[x][y]=pre+1;
pre=ct[x][y];
tmp=map[x][y];
used[x][y]=1;
x+=tx[tmp];
y+=ty[tmp];
}
if(map[x][y]==-1)
printf("%d step(s) to exit\n",pre);
else
if(used[x][y]==1)
printf("%d step(s) before a loop of %d step(s)\n",ct[x][y]-1,pre-ct[x][y]+1);
}
int main()
{
while(init())
{
make();
}
return 0;
}