#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
int go[4][2] = { { -1,0 },{ 1,0 },{ 0,1 },{ 0,-1 } };
bool visit[35];
int pre[35];
int map[6][6];
void print(int val)
{
if (val < 25 && val >= 0 && pre[val] != -1)
{
print(pre[val]);
cout <<'('<< val / 5 << ", " << val % 5 <<')'<< endl;
}
else
cout <<'('<< 0 << ", " << 0<<')' << endl;
}
void BFS()
{
pre[0] = -1;
visit[0] = true;
queue<int> q;
q.push(0);
while (!q.empty())
{
int n = q.front();
q.pop();
int c = n % 5;
int r = n / 5;
for (int i = 0; i < 4; ++i)
{
int nowc = c + go[i][0];
int nowr = r + go[i][1];
int tem = nowc + nowr * 5;
if (nowc>=0&& nowc<5&& nowr >=0&&nowr<5 && !visit[tem]&& !map[r + go[i][1]][c + go[i][0]])
{
pre[nowc+nowr*5] = n;
visit[nowc+nowr*5] = true;
if (nowc+nowr*5 == 24)
{
print(24);
}
q.push(tem);
}
}
}
}
int main()
{
for (int i = 0; i <5; i++)
for (int j = 0; j < 5; j++)
{
cin >> map[i][j];
visit[i * 5 + j] = false;
}
BFS();
//system("pause");
}
广搜问题,每个地点只能到达一次,只有一个前驱,故可以根据正着广搜以表示所有点的前驱,再递归输出