1.题目
描述:
给定一个 m ∗ n m*n m∗n的迷宫,从 S S S出发,到 T T T,找出它的所有答案
样例输入:
5 6
....S#
.##...
.#..#.
#..##.
.T....
样例输出:
The best answer is:
...++#
.##+..
.#++#.
#.+##.
.++...
step = 7
The other answers are:
...++#
.##+..
.#++#.
#.+##.
.++...
step = 7
....+#
.##++.
.#++#.
#++##.
.+....
step = 7
....+#
.##++.
.#++#.
#.+##.
.++...
step = 7
....+#
.##.++
.#..#+
#..##+
.+++++
step = 9
...++#
.##+++
.#..#+
#..##+
.+++++
step = 11
....+#
.##.++
.#..#+
#++##+
.+++++
step = 11
...++#
.##+++
.#..#+
#++##+
.+++++
step = 13
sum = 8
2.
2.1. 存储
bool
型存就可以了:
bool map[SIZE][SIZE];
从 ( 1 , 1 ) (1, 1) (1,1)到 ( m , n ) (m, n) (m,n) ,用false
做墙,true
做空地。
这样,由于全局变量默认为false
,自然地图边缘就有了一圈墙
########
....S# #....S##
.##... #.##...#
.#..#. ---> #.#..#.#
#..##. ##..##.#
.T.... #.T....#
########
考虑到要图形化输出,先存一份原图:
char pic[SIZE][SIZE];
路径用vector
存一下:
struct Move {
int x, y;
Move(int a, int b) {
x = a;y = b;
}
};
vector<Move> path;
vector<vector<Move> > allpath;
2.2.读取模块:
scanf("%d %d", &m, &n);
sx = 1; sy = 1; tx = m; ty = n;
for (int i = 0; i < m; ++i) {
char s[SIZE];
scanf("%s", pic[i]);
strcpy(s, pic[i]);
for (int j = 0; j < n; ++j) {
char c = s[j];
if (c == 'S') sx = i+1, sy = j+1, map[i+1][j+1] = 1;
else if (c == 'T') tx = i+1, ty = j+1, map