首页 > 代码库 > poj 1573

poj 1573

题意:给定每一步的定方向与初始位置  让求出去房间 或者进入循环的步数

直接模拟 

#include<iostream>
#include<cstring>
using namespace std;
int map[11][11];
int v[11][11];
int dir[4][2]={-1,0,1,0,0,-1,0,1};
int main()
{
    int m,n,y,x,step,i,j;
    int xx,yy;
    char c;
    while(cin>>m>>n>>y)
    {
        if(m==n&&n==y&&y==0) break;
        for(i=1;i<=m;i++)
            for(j=1;j<=n;j++)
            {
                cin>>c;
                switch(c){
                case N:map[i][j]=0;break;
                case S:map[i][j]=1;break;
                case W:map[i][j]=2;break;
                case E:map[i][j]=3;break;
                }
            }
        x=1;
        step=0;
        memset(v,-1,sizeof(v));
        while(true)
        {
            xx=x;yy=y;
            v[x][y]=step++;
            x+=dir[map[xx][yy]][0];
            y+=dir[map[xx][yy]][1];
            if(x<=0||x>m||y<=0||y>n)
            {
                cout<<step<<" step(s) to exit"<<endl;
                break;
            }
            if(v[x][y]!=-1)
            {
                cout<<v[x][y]<<" step(s) before a loop of "<<step-v[x][y]<<" step(s)"<<endl;
                break;
            }
        }
    }
    return 0;
}