您的位置:首页 > 其它

走出迷宫功能【误】

2016-11-21 20:04 295 查看
打完区域赛之后好久没做题了,按理来说这样是不行的,但是因为区域赛战绩太烂,也和周围的人发生了一些事情,所以并没有心情做。。。

这博文的主要内容是因为我没带优盘在机房写了个小作业,发在这好带走。

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

char maps[1000][1000];
bool vis[1000][1000];
int step[2][4] = {{1, 0, -1, 0}, {0, 1, 0, -1}};
int n, m;
int top;
int end_x, end_y;
struct node
{
int x, y;
};
struct node stk[1000000 + 5];

bool confirm(int x, int y)
{
if (x < 0 || x >= n || y < 0 || y >= m)
return false;
return true;
}

bool flag;
void solve(int x, int y)
{
int i;
if (maps[x][y] == 'E')
{
struct node tmp;
tmp.x = m - x;
tmp.y = y;
stk[top] = tmp;
flag = true;
return;
}
for (i = 0; i < 4; ++i)
{
if (confirm(x + step[0][i], y + step[1][i]) && !vis[x + step[0][i]][y + step[1][i]] && maps[x + step[0][i]][y + step[1][i]] != '*')
{
vis[x][y] = true;
struct node tmp;
tmp.x = m - (x + step[0][i]);
tmp.y = (y + step[1][i]);
stk[top++] = tmp;
solve(x + step[0][i], y + step[1][i]);
if (flag)
return;
top--;
}
}
return;
}

int main()
{
char ch;
int i, j;
int start_x, start_y;
printf("Would you want to solve a maze? <y/n>: ");
while (1)
{
scanf("%c", &ch);
if (ch == 'n')
break;
else if (ch == 'y')
{
memset(maps, '\0', sizeof(maps));
memset(vis, false, sizeof(vis));
top = 0;
flag = false;

printf("Enter the length and width.\n");
printf("Length:");
scanf("%d", &n);
printf("Width:");
scanf("%d", &m);

printf("Enter the maze:\n<'.' is ground>\n<'*' is wall>\n<'S' is start>\n<'E' is end>\n");
for (i = 0; i < n; ++i)
scanf("%s", maps[i]);

for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
if (maps[i][j] == 'E')
{
end_x = m - i;
end_y = j;
}
if (maps[i][j] == 'S')
{
struct node tmp;
tmp.x = m - i;
start_x = i;
tmp.y = start_y = j;
stk[top++] = tmp;
vis[i][j] = true;
}
}
}
solve(start_x, start_y);
}
else
{
printf("Can't recognize the order.Enter again:\n");
continue;
}
printf("Start from (%d,%d)\nEnd in (%d,%d)\n", stk[0].y + 1, stk[0].x, end_y + 1, end_x);
printf("Path is:\n");
for (i = 0; i < top; ++i)
{
printf("(%d,%d)", stk[i].y + 1, stk[i].x);
if (i < top - 1)
printf(" -> ");
}
printf("\nPlay again? <y/n>: ");
getchar();
}
printf("Bye!\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WLDXZY