请问下面代码的逻辑出了什么问题?为何是死循环?
#include<iostream>
using namespace std;
int MinPath = 70;
int far = -1;
int dp[8][2] = { {1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1},{-2,1},{-1,2} };
int map[10][10] = { 0 };
void dfs(int a, int b)
{
//越界和重复访问的节点,退回
if (a <= 0 || a > 8 || b <= 0 || b > 8 || map[a][b]==1 )return;
//有效距离++
far++;
//未访问过的节点标记
map[a][b] = 1;
//每次到终点都更新距离far
if (map[a][b] == 2 && far < MinPath) MinPath = far;
//dfs8个方向
for (int i = 0; i < 8; i++)
{
int x = a + dp[i][0];
int y = b + dp[i][1];
dfs(x,y);
}
//遍历完了回退时恢复现场
map[a][b] = 0;
return;
}
int main()
{
int a, b, c, d;
cin >> a >> b >> c >> d;
map[c][d] = 2;
dfs(a, b);
if (MinPath == 70)cout << "-1" << endl;
else cout << MinPath << endl;
return 0;
}
