- 算法说明
迷宫问题可以用深度或者是广度搜索来实现走出迷宫,这里使用dfs,同时找出所有可能的路线。
- 源代码
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
struct node {
int x, y;
node(int xx, int yy) {
x = xx;
y = yy;
}
};
#define maxn 1000 + 1
int G[maxn][maxn], dis[maxn][maxn];
int n, x[4] = {0, 1, -1, 0}, y[4] = {-1, 0, 0, 1}, num = 1;
vector<node> vt;
void dfs(int p, int q) {
dis[p][q] = 0;
vt.push_back(node(p, q));
if(p == n - 1 && q == n - 1) {
for(int i = 0; i < vt.size(); i++) {
printf("(%d, %d) ", vt[i].x, vt[i].y);
}
printf("成功走出迷宫%d\n", num++);
return;
}
for(int i = 0; i < 4; i++) {
int newp = p + x[i];
int newq = q + y[i];
if(newp >= 0 && newp <= n - 1 && newq >= 0 && newq <= n - 1) {
if(dis[newp][newq] != 0 && G[newp][newq] == 0) {
dfs(newp, newq);
dis[newp][newq] = -1;
vt.pop_back();
}
}
}
}
int main() {
freopen("迷宫.txt", "r", stdin);
memset(dis, -1, sizeof(dis));
scanf("%d", &n);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
scanf("%d", &G[i][j]);
}
}
dfs(0, 0);
return 0;
}
- 输入数据
- 运行结果