Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define LEN 9
- int side = 0,distant=0;
- int start_x = 1, start_y = 0; //设置起点
- int end_x = 8, end_y = 4; //设置终点
- int success = 0;
- int step(char *,int x, int y);
- void paint_maze(char *,int);
- void print_maze(char *);
- int main(int argc, char argv[])
- {
- scanf("%d", &side);
- char *maze=malloc(sizeof(char)*(side + 2)*(side + 2));
- for (int i = 0; i < side + 2; i++)
- for (int j = 0; j < side + 2; j++)
- *(maze+i*(side+2)+j) ='*';
- //printf("maze:\n"); //打印迷宫图,为方便查看,将数字换为图形打印
- paint_maze(maze,side);
- if (success==0)
- printf("\n沒有找到出口!\n");
- else if(success)print_maze(maze);
- system("pause");
- return 0;
- }
- void paint_maze(int *maze,int board)
- {
- char ch;
- ch = getchar();
- for (int i = 1; i < board + 1; i++)
- {
- for (int j = 1; j < board + 1; j++)
- {
- *(maze + i*(board + 2) + j) = getchar();
- if (*(maze + i*(board + 2) + j) == 'S')
- {
- start_x = i;
- start_y = j;
- }
- else if (*(maze + i*(board + 2) + j) == 'T')
- {
- end_x = i;
- end_y = j;
- }
- }
- ch = getchar();
- }
- }
- int step(char *maze,int x, int y) //用递归算法求解路径
- {
- *(maze+(side+2)*x+y) ='1';
- if (x == end_x && y == end_y)
- {
- success = 1; //打印函数放入递归中,每找到一条成功路径打印一次
- }
- if (success!=1&&y < (side+2) && *(maze+x*(side+2)+y+1) ==' ') { step(maze,x, y + 1); } //边界条件,避免溢出,感谢 @别把白天当黑夜 指正
- if (success != 1 && x < (side+2) && *(maze + (x+1)*(side + 2) + y) ==' ') { step(maze,x + 1, y); }
- if (success != 1 && y > 0 && *(maze + x*(side + 2) + y - 1) == ' ') { step(maze,x, y - 1); }
- if (success != 1 && x > 0 && *(maze + (x - 1)*(side + 2) + y) == ' ') { step(maze,x - 1, y); }
- if(success!=1)*(maze+(x*side+2)+y) =' ';
- }
- void print_maze(char *maze)
- {
- int x, y;
- for (x = 0; x < side+2; x++)
- {
- for (y = 0; y < side+2; y++)
- {
- if (*(maze+x*(side+2)+y) =='*')
- printf("■");
- else if (*(maze + x*(side + 2) + y) =='1')
- {
- printf("☆");
- distant++;
- }
- else printf("□");
- }
- printf("\n%d\n",distant);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment