DFS路径规划

  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 }

 

posted @ 2019-08-14 16:53  vlice  阅读(345)  评论(0编辑  收藏  举报