'commit'
This commit is contained in:
103
C++专题课程/回溯算法/迷宫/C++ 用回溯法求解迷宫问题(递归).cpp
Normal file
103
C++专题课程/回溯算法/迷宫/C++ 用回溯法求解迷宫问题(递归).cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
/*
|
||||
һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>壺
|
||||
<20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>Ϊ<EFBFBD><CEAA>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴﵽĿ<EFB5BD>ꡣ
|
||||
<20><><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD>ijһ<C4B3><D2BB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>ѡ<EFBFBD><EFBFBD><F1B2A2B2>Ż<EFBFBD><C5BB>ﲻ<EFBFBD><EFB2BB>Ŀ<EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD>˻<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߲<EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
<20>˻<EFBFBD><CBBB><EFBFBD><EFBFBD>ߵļ<DFB5><C4BC><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>״̬<D7B4>ĵ<EFBFBD><C4B5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ݵ㡱<DDB5><E3A1B1>
|
||||
<20>û<EFBFBD><C3BB>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʹ<EFBFBD>õݹ鷽<DDB9><E9B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>̽<EFBFBD>ͻ<EFBFBD><CDBB>ݡ<EFBFBD>
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼·<EFBFBD><EFBFBD>
|
||||
1.<2E><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>Թ<EFBFBD><D4B9><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ǽ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>У<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ͨ·<CDA8><C2B7>
|
||||
<20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD>Ǹ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD>Ƿ<C7B7><F1B1BBB7>ʹ<EFBFBD><CAB9><EFBFBD>
|
||||
2.<2E>Թ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ṹ<EFBFBD><E1B9B9><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2A3BAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
3.<2E><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ںͳ<DABA><CDB3>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
||||
ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>λ<EFBFBD>ã<EFBFBD>һֱ<D2BB>ݹ<EFBFBD><DDB9><EFBFBD>ȥ<EFBFBD><C8A5>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ͨ<EFBFBD><CDA8><EFBFBD>ݣ<EFBFBD>
|
||||
*/
|
||||
|
||||
// Ĭ<><C4AC><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
const int XLEN = 14, YLEN = 17;
|
||||
|
||||
int m, p; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int maze[XLEN + 2][YLEN + 2]; // <20>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
int mark[XLEN + 2][YLEN + 2]; // <20><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>,a<><61>b<EFBFBD><62>x,y<><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
||||
struct Offsets {
|
||||
int a, b;
|
||||
};
|
||||
|
||||
// <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<D4B0><D1B7><EFBFBD>ȥ<EFBFBD><C8A5>
|
||||
Offsets direction[8] =
|
||||
{{-1, 0},
|
||||
{-1, 1},
|
||||
{0, 1},
|
||||
{1, 1},
|
||||
{1, 0},
|
||||
{1, -1},
|
||||
{0, -1},
|
||||
{-1, -1}
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵݹ<C4B5><DDB9>㷨
|
||||
bool seekPath(int x, int y) {
|
||||
// <20><><EFBFBD>Թ<EFBFBD>ijһλ<D2BB><CEBB>[i][j]<5D><>ʼ<EFBFBD><CABC>Ѱ<EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>[m][p]<5D><>һ<EFBFBD><D2BB>·<EFBFBD><C2B7>,<2C><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true
|
||||
int i, g, h; // g, h<><68>¼λ<C2BC><CEBB><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
if (x == m && y == p) // m<><6D>p<EFBFBD>dz<EFBFBD><C7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return true;
|
||||
|
||||
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(x, y)<29><>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i = 0; i < 8; i++) {
|
||||
g = x + direction[i].a;
|
||||
h = y + direction[i].b;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>һλ<D2BB><CEBB>Ѱ<EFBFBD><D1B0>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>·<EFBFBD><C2B7>
|
||||
if (maze[g][h] == 0 && mark[g][h] == 0) { // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>
|
||||
mark[g][h] = 1; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD>ѷ<EFBFBD><D1B7>ʹ<EFBFBD>
|
||||
if (seekPath(g, h)) { // <20>ݹ<EFBFBD><DDB9><EFBFBD>̽
|
||||
cout << "(" << g << ", " << h << ")<29><>"; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// <20><><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽ͨ<CCBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>·<EFBFBD><C2B7>
|
||||
}
|
||||
return false; // <20>Ҳ<EFBFBD><D2B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>·<EFBFBD><C2B7>
|
||||
}
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
||||
freopen("./data.txt", "r", stdin);
|
||||
int i, j, x, y;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9><EFBFBD><EFBFBD><EFBFBD>
|
||||
for (i = 0; i < XLEN; i++) {
|
||||
for (j = 0; j < YLEN; j++) {
|
||||
cin >> maze[i][j];
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mark[i][j] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cin >> x >> y;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
cin >> m >> p;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD>ʼ
|
||||
mark[x][y] = 1;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Թ<EFBFBD><D4B9>ĵݹ<C4B5><DDB9>㷨
|
||||
if (seekPath(x, y)) // <20>ɹ<EFBFBD>
|
||||
{
|
||||
cout << "(" << x << ", " << y << ")" << endl;
|
||||
} else {
|
||||
cout << "<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << endl;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user