迷宫问题-坐标系解法

来源:互联网 发布:数据挖掘商业模型 编辑:程序博客网 时间:2024/05/12 21:39

 

/*Description       每组测试数据以三个整数N,M,T(0<n, m≤20, t>0)开头,分别代表迷宫的长和高,以及公主能坚持的天数。  紧接着有M行,N列字符,由".","*","P","S"组成。其中 "." 代表能够行走的空地。 "*" 代表墙壁,王子不能从此通过。  "P" 是公主所在的位置。 "S" 是王子的起始位置。 每个时间段里王子只能选择“上、下、左、右”任意一方向走一步。Prototype     int SSaveP (int *maze[], int M, int n, int t)Input Param      maze            迷宫布局(这里用二维数组实现布局)        M               迷宫(数组)行数     N               迷宫(数组)列数 T               公主能坚持的天数Output Param                      无Return Value     0         可以救出公主     -1        不可以救出公主*/#include<stdio.h> #include<string.h> #include<iostream>using namespace std;char map[22][22];bool flg;struct point { int x; int y; };point p[4] = {{0, 1},{0, -1},{1, 0},{-1, 0}}; void deep(point S, point P, int t) { if(flg) return; if (map[S.x][S.y] == 'P') { flg = true; return; } if (abs(S.x - P.x) + abs(S.y - P.y) > t) return;  for (int i = 0; i < 4; i++) { if ( map[S.x + p[i].x][S.y + p[i].y] != '*'){map[S.x][S.y] = '*';S.x = S.x + p[i].x;S.y = S.y + p[i].y;deep(S, P, t - 1);S.x = S.x - p[i].x;S.y = S.y - p[i].y;map[S.x][S.y] = '.'; } } }int SSavep(char *visited, int t, int n, int m){ memset(map, '*', sizeof(char) * 22 * 22);flg = false;for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){map[i][j] = *visited++;}}point S;point P;for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){if (map[i][j] == 'S'){S.x = i;S.y = j;}if (map[i][j] == 'P'){P.x = i;P.y = j;}}}deep(S, P, t);if (flg)return 0;elsereturn -1;}  


 

0 0