1 #include <stdio.h>
2 #include <iostream>
3
4 int width = 6;
5 int height = 5;
6 int map[5][6] = { {0,0,0,0,0,0},
7 {1,0,0,1,0,1},
8 {0,0,1,0,0,0},
9 {1,0,0,1,0,1},
10 {0,1,0,0,0,0} };
11
12 int path[20] = { 0 }; //0--stop,1--forward,2--left,3--right,4--back
13
14 int find_path(int x, int y, int flag, //x,y为在map中的位置,flag代表之前走的方向(0--上,1--下,2--左,3--右),
15 int x_, //x代表path的下标
16 int target_x, int target_y) //target_x,target_y代表要找到的具体位置
17 {
18 map[x][y] = 1;
19 int temp;
20 int flag_ = flag;
21 int x__ = x_;
22 if (x == target_x && y == target_y)
23 {
24 return x_;
25 }
26
27 if (flag == 0) {
28 if (x > 0) {
29 if (map[x - 1][y] == 0) {
30 path[x_] = 1;
31 temp = find_path(x - 1, y, flag, x_ + 1, target_x, target_y);
32 if (temp == 0) {
33 map[x - 1][y] = 1;
34 flag = flag_;
35 x_ = x__;
36 }
37 else {
38 return temp;
39 }
40 }
41 }
42
43 if (y < width-1 ) {
44 if (map[x][y + 1] == 0) {
45 path[x_] = 3;
46 path[++x_] = 1;
47 //if (flag == 2) { path[x_] = 4; }
48 flag = 3;
49 temp = find_path(x, y + 1, flag, x_ + 1, target_x, target_y);
50 if (temp == 0) {
51 map[x][y + 1] = 1;
52 flag = flag_;
53 x_ = x__;
54 }
55 else { return temp; }
56 }
57 }
58
59 if (y > 0) {
60 if (map[x][y - 1] == 0) {
61 path[x_] = 2;
62 path[++x_] = 1;
63 flag = 2;
64 temp = find_path(x, y - 1, flag, x_ + 1, target_x, target_y);
65 if (temp == 0) {
66 map[x][y - 1] = 1;
67 flag = flag_;
68 x_ = x__;
69 }
70 else {
71 return temp;
72 }
73 }
74 }
75 }
76
77
78 if (flag == 1) {
79 if (x < height - 1) {
80 if (map[x + 1][y] == 0) {
81 path[x_] = 1;
82 temp = find_path(x + 1, y, flag, x_ + 1, target_x, target_y);
83 if (temp == 0) {
84 map[x + 1][y] = 1;
85 flag = flag_;
86 x_ = x__;
87 }
88 else {
89 return temp;
90 }
91 }
92 }
93
94 if (y < width - 1) {
95 if (map[x][y + 1] == 0) {
96 path[x_] = 2;
97 path[++x_] = 1;
98 flag = 3;
99 temp = find_path(x, y + 1, flag, x_ + 1, target_x, target_y);
100 if (temp == 0) {
101 map[x][y + 1] = 1;
102 flag = flag_;
103 x_ = x__;
104 }
105 else { return temp; }
106 }
107 }
108
109 if (y > 0) {
110 if (map[x][y - 1] == 0) {
111 path[x_] = 3;
112 path[++x_] = 1;
113 flag = 2;
114 temp = find_path(x, y - 1, flag, x_ + 1, target_x, target_y);
115 if (temp == 0) {
116 map[x][y - 1] = 1;
117 flag = flag_;
118 x_ = x__;
119 }
120 else {
121 return temp;
122 }
123 }
124 }
125 }
126
127 if (flag == 2) {
128 if (y > 0) {
129 if (map[x][y - 1] == 0) {
130 path[x_] = 1;
131 temp = find_path(x, y - 1, flag, x_ + 1, target_x, target_y);
132 if (temp == 0) {
133 map[x][y - 1] = 1;
134 flag = flag_;
135 x_ = x__;
136 }
137 else {
138 return temp;
139 }
140 }
141 }
142
143 if (x > 0) {
144 if (map[x - 1][y] == 0) {
145 path[x_] = 3;
146 path[++x_] = 1;
147 flag = 0;
148 temp = find_path(x - 1, y, flag, x_ + 1, target_x, target_y);
149 if (temp == 0) {
150 map[x - 1][y] = 1;
151 flag = flag_;
152 x_ = x__;
153 }
154 else {
155 return temp;
156 }
157 }
158 }
159
160 if (x < height - 1) {
161 if (map[x + 1][y] == 0) {
162 path[x_] = 2;
163 path[++x_] = 1;
164 flag = 1;
165 temp = find_path(x + 1, y, flag, x_ + 1, target_x, target_y);
166 if (temp == 0) {
167 map[x + 1][y] = 1;
168 flag = flag_;
169 x_ = x__;
170 }
171 else {
172 return temp;
173 }
174 }
175 }
176 }
177
178 if (flag == 3) {
179
180 if (y < width - 1) {
181 if (map[x][y + 1] == 0) {
182 path[x_] = 1;
183 temp = find_path(x, y + 1, flag, x_ + 1, target_x, target_y);
184 if (temp == 0) {
185 map[x][y + 1] = 1;
186 flag = flag_;
187 x_ = x__;
188 }
189 else { return temp; }
190 }
191 }
192
193 if (x > 0) {
194 if (map[x - 1][y] == 0) {
195 path[x_] = 2;
196 path[++x_] = 1;
197 flag = 0;
198 temp = find_path(x - 1, y, flag, x_ + 1, target_x, target_y);
199 if (temp == 0) {
200 map[x - 1][y] = 1;
201 flag = flag_;
202 x_ = x__;
203 }
204 else {
205 return temp;
206 }
207 }
208 }
209
210 if (x < height - 1) {
211 if (map[x + 1][y] == 0) {
212 path[x_] = 3;
213 path[++x_] = 1;
214 flag = 1;
215 temp = find_path(x + 1, y, flag, x_ + 1, target_x, target_y);
216 if (temp == 0) {
217 map[x + 1][y] = 1;
218 flag = flag_;
219 x_ = x__;
220 }
221 else {
222 return temp;
223 }
224 }
225 }
226 }
227 //map[x][y] = 0;
228 return 0;
229 }
230
231 int main() {
232 int x, y, x_, y_;
233 int flag;
234 for (int i = 0; i < 5; i++) {
235 for (int j = 0; j < 6; j++) {
236 printf_s("%d ", map[i][j]);
237 }
238 printf_s("\n");
239 }
240 printf_s("请输入您的起点: ");
241 scanf_s("%d%d", &x, &y);
242 printf_s("请输入您的终点:");
243 scanf_s("%d%d", &x_, &y_);
244 printf_s("请输入默认的初始方向(0 -- 上,1 -- 下,2 -- 左,3 -- 右)");
245 scanf_s("%d", &flag);
246 x = find_path(x, y, flag, 0, x_, y_);
247 for (int i = 0; i < x; i++) {
248 if (path[i] == 0) break;
249 if (path[i] == 1) printf_s("forward\n");
250 if (path[i] == 2) printf_s("left\n");
251 if (path[i] == 3) printf_s("right\n");
252 }
253 system("pause");
254 return 0;
255 }