直接BFS即可
#include"iostream" #include"cstring" using namespace std; const int Max_L = 5; const int Max_H = 5; int Graph[Max_H][Max_L] = {0}; int vis[Max_H][Max_L] = {0}; struct Node{ int fa; int x; int y; }q[Max_L * Max_H]; void print(int idx) { if(idx != q[idx].fa){ print(q[idx].fa); } printf("(%d, %d)\n",q[idx].y,q[idx].x); } void bfs() { int front = 0,rear = 1; q[0].fa = 0; q[0].x = q[0].y = 0; vis[0][0] = 1; int aim[4][2] = {{0,1},{0,-1},{1,0},{-1,0}}; while(front < rear) { struct Node &u = q[front]; if(u.x == 4 && u.y == 4) { //print this answer print(front); return; } for(int k = 0 ; k < 4 ; k ++) { struct Node &v = q[rear]; v.x = u.x + aim[k][1]; v.y = u.y + aim[k][0]; if(v.x >= 0 && v.y >= 0 && v.x < Max_L && v.y < Max_H) { if(!vis[v.y][v.x] && Graph[v.y][v.x] == 0) { vis[v.y][v.x] = 1; v.fa = front; rear ++; } } } front ++; } } int main(void) { for(int i = 0 ; i < 5 ; i ++) { for(int j = 0 ; j < 5 ; j ++) { scanf("%d",&(Graph[i][j])); } } memset(vis,0,sizeof(vis)); bfs(); return 0; }