代码很简单,学会使用BFS可以很快解决此类问题
#include
#include
const int maxn = 65536;
int c[4][2] = {0,1,1,0,0,-1,-1,0};
int visit[5][5];
int m[5][5];
int pre[maxn];
int q[maxn][2];
int bfs() {
int head = 0;
int tail = head+1;
q[head][0] = 0;
q[head][1] = 0;
pre[head] = -1;
while(head < tail) {
if(q[head][0] == 4 && q[head][1] == 4) {
return head;
}
for(int i = 0;i < 4;i++) {
int a = q[head][0] + c[i][0];
int b = q[head][1] + c[i][1];
if(a >= 0 && b>= 0 && a < 5 && b < 5 && m[a][b] == 0 && visit[a][b] == 0) {
visit[a][b] = 1;
q[tail][0] = a;
q[tail][1] = b;
pre[tail] = head;
tail++;
}
}
head++;
}
return -1;
}
int main() {
memset(visit,0,sizeof(visit));
memset(m,0,sizeof(m));
memset(q,0,sizeof(q));
for(int i = 0;i < 5;i++) {
for(int j = 0;j < 5;j++) {
scanf("%d",&m[i][j]);
}
}
int rslt = bfs();
if(rslt == -1) {
printf("No way");
} else {
int arr[25][2];
int pos = 0;
while(pre[rslt] != -1) {
arr[pos][0] = q[rslt][0];
arr[pos][1] = q[rslt][1];
pos++;
rslt = pre[rslt];
}
if(pre[rslt] == -1) {
arr[pos][0] = q[rslt][0];
arr[pos][1] = q[rslt][1];
pos++;
}
for(int k = pos-1;k >= 0;k--) {
printf("(%d, %d)\n",arr[k][0],arr[k][1]);
}
}
return 0;
}
/*
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*/