1
2
3
4
5
|
struct
Pos
{
size_t
line;
size_t
row;
};
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
if
(pos.row>0 && maze[pos.line * 10 + pos.row - 1] == 1)
//左
{
p.push(pos.line * 10 + pos.row);
pos.row--;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.row < 9 && maze[pos.line * 10 + pos.row + 1] == 1)
//右
{
p.push(pos.line * 10 + pos.row);
pos.row++;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.line > 0 && maze[(pos.line - 1) * 10 + pos.row] == 1)
//上
{
p.push(pos.line * 10 + pos.row);
pos.line--;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.line < 9 && maze[(pos.line + 1) * 10 + pos.row] == 1)
//下
{
p.push(pos.line * 10 + pos.row);
pos.line++;
maze[(pos.line * 10 + pos.row)] = 2;
}
|
1
2
3
4
|
maze[(pos.line * 10 + pos.row)] = 3;
pos.line = p.top() / 10;
pos.row = p.top() - pos.line*10;
p.pop();
|
1
2
3
4
5
|
if
(pos.line * 10 + pos.row == 91)
{
PrintMaze(maze);
return
1;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<assert.h>
#include<stack>
using
namespace
std;
struct
Pos
{
size_t
line;
size_t
row;
};
void
InitMaze(
int
*maze)
{
FILE
*p =
fopen
(
"maze.txt"
,
"r"
);
for
(
int
i = 0; i < 10; i++)
{
for
(
int
j = 0; j < 10;)
{
int
tmp =(
int
)(
fgetc
(p))-
'0'
;
if
(tmp == 0)
maze[i*10+j] = 0;
if
(tmp == 1)
maze[i*10+j] = 1;
if
(tmp == 1 || tmp == 0)
j++;
}
}
fclose
(p);
}
void
PrintMaze(
int
*maze)
{
for
(
int
i = 0; i < 10; i++)
{
for
(
int
j = 0; j < 10; j++)
{
cout << maze[i * 10 + j] <<
" "
;
}
cout << endl;
}
cout << endl;
}
int
GoMaze(
int
*maze,Pos start)
{
assert
(maze);
stack<
int
> p;
Pos pos;
pos.line = start.line;
pos.row = start.row;
while
(1)
{
maze[(pos.line * 10 + pos.row)] = 2;
if
(pos.row>0 && maze[pos.line * 10 + pos.row - 1] == 1)
//左
{
p.push(pos.line * 10 + pos.row);
pos.row--;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.row < 9 && maze[pos.line * 10 + pos.row + 1] == 1)
//右
{
p.push(pos.line * 10 + pos.row);
pos.row++;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.line > 0 && maze[(pos.line - 1) * 10 + pos.row] == 1)
//上
{
p.push(pos.line * 10 + pos.row);
pos.line--;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
if
(pos.line < 9 && maze[(pos.line + 1) * 10 + pos.row] == 1)
//下
{
p.push(pos.line * 10 + pos.row);
pos.line++;
maze[(pos.line * 10 + pos.row)] = 2;
}
else
{
maze[(pos.line * 10 + pos.row)] = 3;
pos.line = p.top() / 10;
pos.row = p.top() - pos.line*10;
p.pop();
}
if
(pos.line * 10 + pos.row == 91)
{
PrintMaze(maze);
return
1;
}
}
}
void
Mazetest()
{
int
maze[10][10];
Pos p;
p.line = 2;
p.row = 0;
InitMaze((
int
*)maze);
PrintMaze((
int
*)maze);
GoMaze((
int
*)maze,p);
}
int
main()
{
Mazetest();
return
0;
}
|