不知道问题出在哪里,一直是Time Limit Exceeded
#include <stdio.h>
#include <stdlib.h>#include <math.h>
#include <string.h>
int main()
{
int row, column, enter;
char Grid[10][10];
int map[10][10];
int i, j;
int x, y;
int num;
int loop_num;
int loop_x, loop_y;
for (;;)
{
scanf_s("%d %d %d", &row, &column, &enter, 1);
if(!(row&&column&&enter))
break;
memset(Grid, 'O', sizeof(Grid)); // 大写字母o
loop_num = 0;
for (i = 1; i <= row; i++)
{
getchar(); // 把回车符取走,不然后面会读到回车符
/*scanf("%*c%c", &Grid[i][1]);
printf("Grid[%d][1] = %c\n", i, Grid[i][1]);*/
for (j = 1; j <= column; j++)
{
/*scanf("%c", &Grid[i][j]);*/
Grid[i][j] = getchar();
//printf("Grid[%d][%d] = %c\n", i, j, Grid[i][j]);
}
//getchar();
//scanf("%s", Grid[i]);
}
//printf("\n");
//for (i = 1; i <= row; i++)
//{
// for (j = 1; j <= column; j++)
// {
// printf("%c", Grid[i][j]);
// }
// printf("\n");
// //printf("%s\n", Grid[i]);
//}
memset(map, 0, sizeof(map));
x = 1;
y = enter;
for (num = 0; ; num++)
{
map[x][y]++;
if(Grid[x][y] == 'N')
x--;
else if(Grid[x][y] == 'E')
y++;
else if(Grid[x][y] == 'S')
x++;
else if(Grid[x][y] == 'W')
y--;
else if (Grid[x][y] == 'O')
{
printf("%d step(s) to exit\n", num);
break;
}
if (map[x][y] == 2)
{
int flag = 1;
loop_x = x;
loop_y = y;
for (x = 1,y = enter, num = 0; ; num++)
{
if(x==loop_x&&y==loop_y&&flag==1)
{
printf("%d step(s) before a loop of ", num);
num = 0;
flag++;
}
if (x==loop_x&&y==loop_y&&flag==2&&num!=0)
{
printf("%d step(s)\n", num);
break;
}
if(Grid[x][y] == 'N')
x--;
else if(Grid[x][y] == 'E')
y++;
else if(Grid[x][y] == 'S')
x++;
else if(Grid[x][y] == 'W')
y--;
}
break; // 退出for循环
}
}
}
return 0;
}
将 char Grid[10][10]; int map[10][10]; 改为 char Grid[12][12]; int map[12][12]; 外围要加一层