标签:
两只牛逃跑到了森林里。农夫John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。
追击在10x10的平面网格内进行。一个格子可以是:
一个障碍物, 两头牛(它们总在一起), 或者 农民John. 两头牛和农民John可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。
一个格子可以是:
. 空地
*障碍物
C 两头牛
F 农民John
这里有一个地图的例子:
*...*.....
......*...
...*...*..
..........
...*.F....
*.....*...
...*......
..C......*
...*.*....
.*.*......
牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。否则它们会用这一分钟顺时针转90度。 同时,它们不会离开地图。
农民John深知牛的移动方法,他也这么移动。
每次(每分钟)农民John和两头牛的移动是同时的。如果他们在移动的时候穿过对方,但是没有在同一格相遇,我们不认为他们相遇了。当他们在某分钟末在某格子相遇,那么追捕结束。
读入十行表示农夫John,两头牛和所有障碍的位置的地图。每行都只包含10个字符,表示的含义和上面所说的相同,你可以确定地图中只有一个‘F‘和一个‘C‘.‘F‘和‘C‘一开始不会处于同一个格子中。
计算农夫John需要多少分钟来抓住他的牛,假设牛和农夫John一开始的行动方向都是正北(即上)。 如果John和牛永远不会相遇,输出0。
输入格式:
每行10个字符,表示如上文描述的地图。
输出格式:
输出一个数字,表示John需要多少时间才能抓住牛们。如果John无法抓住牛,则输出0。
代码没有什么技巧,就(复)是(制)这(和)么(粘)长(贴),就是这么直接(233333)
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 char map[11][11]; 5 int x,y,t,xx,yy,tt; 6 int v[11][11][5][11][11][5]; 7 void init() 8 { 9 memset(v,0,sizeof(v)); 10 } 11 void getnext(){ 12 switch(t){ 13 case 1: 14 if(x==1){ 15 t=4; 16 }else if(map[x-1][y]==‘*‘){ 17 t=4; 18 }else{ 19 x--; 20 } 21 break; 22 case 2: 23 if(x==10){ 24 t=3; 25 }else if(map[x+1][y]==‘*‘){ 26 t=3; 27 }else{ 28 x++; 29 } 30 break; 31 case 3: 32 if(y==1){ 33 t=1; 34 }else if(map[x][y-1]==‘*‘){ 35 t=1; 36 }else{ 37 y--; 38 } 39 break; 40 case 4: 41 if(y==10){ 42 t=2; 43 }else if(map[x][y+1]==‘*‘){ 44 t=2; 45 }else{ 46 y++; 47 } 48 break; 49 } 50 51 switch(tt){ 52 case 1: 53 if(xx==1){ 54 tt=4; 55 }else if(map[xx-1][yy]==‘*‘){ 56 tt=4; 57 }else{ 58 xx--; 59 } 60 break; 61 case 2: 62 if(xx==10){ 63 tt=3; 64 }else if(map[xx+1][yy]==‘*‘){ 65 tt=3; 66 }else{ 67 xx++; 68 } 69 break; 70 case 3: 71 if(yy==1){ 72 tt=1; 73 }else if(map[xx][yy-1]==‘*‘){ 74 tt=1; 75 }else{ 76 yy--; 77 } 78 break; 79 case 4: 80 if(yy==10){ 81 tt=2; 82 }else if(map[xx][yy+1]==‘*‘){ 83 tt=2; 84 }else{ 85 yy++; 86 } 87 break; 88 } 89 } 90 int main() 91 { 92 init(); 93 for(int i=1;i<=10;i++){ 94 for(int j=1;j<=10;j++){ 95 cin>>map[i][j]; 96 if(map[i][j]==‘C‘){ 97 x=i,y=j,t=1; 98 } 99 if(map[i][j]==‘F‘){ 100 xx=i,yy=j,tt=1; 101 } 102 } 103 } 104 int ans=0; 105 while(true){ 106 if(v[x][y][t][xx][yy][tt]){ 107 cout<<0<<endl; 108 return 0; 109 } 110 v[x][y][t][xx][yy][tt]=v[xx][yy][tt][x][y][t]=1; 111 if(x==xx&&y==yy){ 112 cout<<ans; 113 return 0; 114 } 115 getnext(); 116 ans++; 117 } 118 return 0; 119 }
标签:
原文地址:http://www.cnblogs.com/gzhonghui/p/5691625.html