Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

POJ 2632 Crashing Robots

/* 题目很好理解,要你判断机器人的路径,输出
* 碰撞信息,关键是题目的二维数组需要转换(下标不一样)
* 还有就是机器人的状态要及时更新,我就在这儿调试了
* 半天才找出来的,郁闷了。
* 机器人状态: 坐标x,y,方向drt,方向要及时更新,
* 地图也要及时更新,就差不多了。
*/

 

code
#include<iostream>
using namespace std;
struct Node
{
    
int x,y;
    
int drt;
}rob[
105];
int map[105][105],n,m;
int check(int index,int step)
{
    
int i=0;
    
int x = rob[index].x-1;
    
int y = rob[index].y-1;
    map[x][y] 
= -1;
    
if(rob[index].drt == 0)
    {
        
for(i=1;i<=step;++i)
            
        {
            
if(x+i>=n)
                
return -1;
            
if(map[x+i][y]==-1)
                
continue;
            
else
                
return map[x+i][y];
        }
        map[x
+step][y]=index;
        rob[index].x
+=step;
    } 
if(rob[index].drt == 1)
    {
        
for(i=1;i<=step;++i)
        {
            
if(y+i>=m)
                
return -1;
            
if(map[x][y+i]!=-1)
                
return map[x][y+i];
        }
        map[x][y
+step]=index;
        rob[index].y 
+= step;
    } 
if(rob[index].drt == 3)
    {
        
for(i=1;i<=step;++i)
        {
            
if(y-i<0)
                
return -1;
            
if(map[x][y-i]!=-1)
                
return map[x][y-i];
        }
        map[x][y
-step]=index;
        rob[index].y 
-=step;
    }
if(rob[index].drt == 2
    {
        
for(i=1;i<=step;++i)
        {
            
if(x-i<0)
                
return -1;
            
if(map[x-i][y]!=-1)
                
return map[x-i][y];
        }
        map[x
-step][y]=index;
        rob[index].x 
-=step;
    }
    
return 0;
}
int main()
{
    
char ch;
    
int i,j,k,time,nr_rob,nr_ins,tmp,rep,num_rob,flag;
    cin
>>time;
    
while(time--)
    {
        cin
>>m>>n;
        cin
>>nr_rob>>nr_ins;
        
for(i=0;i<n;++i)
            
for(j=0;j<m;++j)
                map[i][j]
=-1;
        
for(i=1;i<=nr_rob;++i)
        {
            
//scanf("%d%d%c",&(rob[i].y),&(rob[i].x),&ch);
            cin>>rob[i].y>>rob[i].x>>ch;
            
if(ch=='N') tmp = 0;
            
else if(ch=='E') tmp = 1;
            
else if(ch=='S') tmp = 2;
            
else if(ch=='W') tmp =3;
            rob[i].drt 
= tmp;
            map[rob[i].x
-1][rob[i].y-1= i;
        }
        flag 
= 0;
        
for(i=0;i<nr_ins;++i)
        {
            cin
>>num_rob>>ch>>rep;
            
if(ch=='L')
                rob[num_rob].drt 
= (rob[num_rob].drt+3*rep)%4;
            
else if(ch=='R')
                rob[num_rob].drt 
= (rob[num_rob].drt+1*rep)%4;
            
else if(ch =='F')
            {
                
if(flag ==1)
                    
continue;
                tmp 
= check(num_rob,rep);
                
if(tmp == 0)
                    
continue;
                
else if(tmp == -1)
                {
                    printf(
"Robot %d crashes into the wall\n",num_rob);
                    flag 
= 1;
                }
                
else 
                {
                    printf(
"Robot %d crashes into robot %d\n",num_rob,tmp);
                    flag 
= 1;
                }
            }
        }
        
if(flag == 0)
            cout
<<"OK"<<endl;
    }
    
return 0;

}

 

 

posted on 2010-02-03 16:37  Lvpengms  阅读(280)  评论(0编辑  收藏  举报