猫和老鼠
Time Limit:2s Memory Limit:1000k
Total Submit:3757 Accepted:1663
下载样例程序(PE)
下载样例程序(ELF)
Problem
猫和老鼠在10*10的方格中运动,例如:
*...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*...... ..M......* ...*.*.... .*.*......
C=猫(CAT)
M=老鼠(MOUSE)
*=障碍物
.=空地
猫和老鼠每秒中走一格,如果在某一秒末他们在同一格中,我们称他们“相遇”。
注意,“对穿”是不算相遇的。猫和老鼠的移动方式相同:平时沿直线走,下一步如果会走到障碍物上去或者出界,
就用1秒的时间做一个右转90度。一开始他们都面向北方。
编程计算多少秒以后他们相遇。
Input
第一行为一整数N,表示有N组测试数据。
每组测试数据为10行,格式如题目描述。
Output
相遇时间T。如果无解,输出-1。
Sample Input
1 *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*...... ..M......* ...*.*.... .*.*......
Sample Output
49
C的解答和结果
#include <stdio.h>
struct Node
{
int x, y;
char pos;
};
char array[10][11];
void MoveNext(struct Node* who)
{
switch(who->pos){
case 'N':
if(who->x == 0 || array[who->x - 1][who->y] == '*') who->pos = 'E';
else who->x --;
break;
case 'S':
if(who->x == 9 || array[who->x + 1][who->y] == '*') who->pos = 'W';
else who->x ++;
break;
case 'E':
if(who->y == 9 || array[who->x][who->y+1] == '*') who->pos = 'S';
else who->y ++;
break;
case 'W':
if(who->y == 0 || array[who->x][who->y-1] == '*') who->pos = 'N';
else who->y --;
break;
}
}
int main()
{
int N, i, j, k, count;
struct Node Mouse, Cat;
scanf("%d", &N);
gets(array[0]);
for(k = 0; k < N; k++){
for(j = 0; j < 10; j++) gets(array[j]);
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++){
if(array[i][j] == 'C'){
Cat.x = i; Cat.y = j;
Cat.pos = 'N';
}else if(array[i][j] == 'M'){
Mouse.x = i; Mouse.y = j;
Mouse.pos = 'N';
}
}
count = 0;
while(count < 100 && (Mouse.x != Cat.x || Mouse.y != Cat.y)){
MoveNext(&Mouse);
MoveNext(&Cat);
count++;
}
if(Mouse.x == Cat.x && Mouse.y == Cat.y) printf("%d/n", count);
else printf("-1/n");
}
return 0;
}
Memory: 32K
Time: 1ms