题目大意:
小新困在迷宫里了,请求贝利救援。已知迷宫里仅有空地和障碍物,要求贝利以最快的速度找到小新,即求找到小心的最短路径。要保证不能出界哦!
输入:
第一行为几行几列;
下一行开始输出具体的矩阵;
最后一行为贝利的起始位置坐标和小新的位置坐标。
代码实现:
#include<iostream> #include<cstdio> using namespace std; int a[51][51], book[51][51]; int Min=99999999; int n, m, p, q; void dfs(int x, int y, int step) { int nextt[4][2] = { { 0,1 },{ 1,0 },{ 0,-1 },{ -1,0 } }; int tx, ty, k; //判断是否到达小哈的位置 if (x == p&&y == q) {//每完成一条路径更新一次 if (step < Min) Min = step; return;//此处的返回很重要,返回到最近调用函数的地方 } //枚举4种走法 for (k = 0; k < 3; k++) { tx = x + nextt[k][0]; ty = y + nextt[k][1]; if (tx<1 || tx>n || ty<1 || ty>m) continue; if (a[tx][ty] == 0 && book[tx][ty] == 0) { book[tx][ty] = 1;//标记这个点已经走过 dfs(tx, ty, step + 1);//开始尝试下一个点 book[tx][ty] = 0;//尝试结束,取消这个点的标记,为下次条路径做准备 } } return; } int main() { int i, j, starx, stary; scanf("%d%d", &n, &m); for (i = 1; i <= n; i++) { for (j = 1; j <= m; j++) { scanf("%d", &a[i][j]); } } scanf("%d%d%d%d", &starx, &stary, &p, &q); book[starx][stary] = 1; dfs(starx, stary, 0); printf("%d\n", Min); system("pause"); return 0; }实现效果: